Türchen 17: Magento und die robots.txt

Die robots.txt ist eine einfache Textdatei, die im Stammverzeichnis einer Webseite abgelegt wird. Darin werden Regeln für die Indexierung durch Suchmaschinen notiert. Alle Webcrawler, die den Robots Exclusion Standard implementieren, schauen sich zuerst diese Datei an, bevor sie mit dem Crawling der Webseite beginnen. Dabei werden dann die formulierten Regeln beachtet.

Ein einfaches Beispiel:

User-agent: *
Disallow: /noindex.html
Disallow: /noindex/
Disallow: /*.css$
Sitemap: http://www.domain.de/sitemap.xml

Im ersten Block (Zeile 1 bis 4) werden Regeln für alle Crawler definiert: Der Zugriff auf die Datei /noindex.html, den Unterordner /noindex/ (inkl. aller weiteren Unterverzeichnisse und Dateien darin) und alle CSS-Dateien wird unterbunden.

In Zeile 5 befindet sich schließlich noch der Verweis auf eine XML-Sitemap.

Man kann also über eine robots.txt Crawlern zeigen, welche Bereiche der Webseite sie explizit aufnehmen (Sitemap) und welche sie ignorieren sollen (Disallow).

Worin liegt der Unterschied zum Meta-Tag im HTML-Head?

Das Meta-Tag im HTML-Head sieht gewöhnlich so aus:

<meta name="robots" content="INDEX,FOLLOW">

Ist der Zugriff auf eine Seite oder einen Bereich durch die robots.txt untersagt, werden diese Dokumente gar nicht erst vom Server abgerufen, was Traffic spart und ggf. die Serverlast etwas reduziert. Hingegen findet dann eine Weiterverfolgung von Links (FOLLOW) auch nicht mehr statt.

Die Blockade über die robots.txt ist flexibler und grobgranularer, da sie regelbasiert ist. Muss man bei den Meta-Tags jedes einzige HTML-Dokument anpassen, so können hier ganze Verzeichnisbäume in einer Regel gesperrt werden. PDF-Dokumente beispielsweise haben keine Robots-Meta-Tags, sodass diese grundsätzlich nur über die robots.txt ausgeschlossen werden können.

Bei der robots.txt können verschiedene Crawler unterschiedlich behandelt werden, z.B.:

User-agent: Googlebot-Image
Disallow: /

Mit diesem Block wird nur der Crawler für die Bilder-Suche von Google ausgeschlossen, alle andere crawlen munter weiter.

Warum man einige Seiten von Suchmaschinen fernhalten sollte

Auf den ersten Blick mag es unsinnig erscheinen, Seiten von Suchmaschinen auszuschließen. Aber auch hier ist weniger häufig mehr. Warum sollen Suchmaschinen irrelevante Seiten indexieren? Diese werden von Google und Co. sowieso abgewertet und tauchen dann in den SERPs nicht auf. Sollten sie dies trotzdem tun und ein Nutzer klickt auf das Suchergebnis,
wird er wenig Nutzen aus einer solchen Seite ziehen (z.B. ein leerer Warenkorb). Dann doch lieber auf einer spannenden Kategorie- oder Produktseite landen.

Außerdem sollte man das manchmal kleine "Aufmerksamkeitsfenster" von Suchmaschinen möglichst effizient nutzen und sich auf das Relevante fokussieren.

Der bereits genannte Aspekt der Reduzierung des Traffics und der Verbesserung der Performance könnte ebenfalls in einigen wenigen Konstellationen als Argument zählen.

Die robots.txt in Magento

Es gibt sie nicht! Magento liefert im Standard überhaupt keine robots.txt aus. Diese wird auch nicht automatisch erstellt, wenn man eine XML-Sitemap generiert. Auch wird
keine Warnung ausgegeben, dass die Datei fehlt. Die Suche im Code ist auch erfolglos. Kurz: Magento ignoriert dieses Thema vollständig.

Man muss also selbst Hand anlegen und alle für Suchmaschinen uninteressanten Bereiche ausklammern. Bei vielen Shops mit aktiviertem mod_rewrite sieht das (in Summe) etwa so aus:

User-agent: *
Disallow: /index.php/
Disallow: /*?
Disallow: /*.js$
Disallow: /*.css$
Disallow: /*.php$
Disallow: /admin/
Disallow: /app/
Disallow: /catalog/
Disallow: /catalogsearch/
Disallow: /checkout/
Disallow: /customer/
Disallow: /downloader/
Disallow: /js/
Disallow: /lib/
Disallow: /media/
Disallow: /newsletter/
Disallow: /pkginfo/
Disallow: /report/
Disallow: /review/
Disallow: /skin/
Disallow: /var/
Disallow: /wishlist/

Im Prinzip werden damit die Seiten einiger relevanter Core-Module gesperrt, so zum Beispiel des Bestellprozesses (checkout), des Kundenmenüs (customer) und des Wunschzettels (wishlist).

Die ersten Zeilen sind die spannenden: Mit der ersten Disallow-Regel (Zeile 2) werden alle Seiten blockiert, die nicht über einen URL-Rewrite laufen. Schaltet man im Magento-Backend
die Webserver Rewrites aus oder passiert dies aufgrund eines Fehlers, ist der SEO-Super-Gau perfekt: Der ganze Shop fliegt aus dem Index. Also Vorsicht!

Über die zweite Regel (Zeile 3) lässt sich trefflich streiten und hier gibt es auch Raum für individuelle Anpassungen. Das Pattern /*? schließt alle Seiten aus, in denen URL-Parameter enthalten sind, also auch die Kategorieseiten ab Seite 2 (blättern). Dies wird vornehmlich gemacht, um das Problem des Duplicate Contents etwas zu entschärfen. Diese Seiten sind sich naturgemäß recht ähnlich, da sie denselben Browsertitel, dieselbe Überschrift und ggf. auch noch denselben CMS-Block enthalten. Magento stellt diese Seiten im Standard alle auf INDEX, FOLLOW.

Auch Suchergebnisseiten werden über diese Regel ausgeschlossen. Shops, die die TagCloud mit beliebten Suchanfragen nutzen (catalogsearch/term/popular) wollen, sollten auf die Blockade des Moduls catalogsearch (Zeile 10) verzichten und Suchergebnisseiten mit dem Parameter q nach den Disallow-Regeln wieder zulassen:

Allow: /*?q=
Allow: /*&q=

Wer die Kundenmeinungen zu seinen Produkten bei Google drin haben möchte, sollte nicht das Modul reviews blockieren.

Interessant ist auch Zeile 7, in der der Zugriff auf das Magento-Admin-Panel unterbunden wird. Wer bei der Installation von Magento unnötigerweise das Backend verstecken wollte, wird sich an dieser Stelle dann ggf. wieder verraten (Stichwort Security through Obscurity).

Mehrere Webseiten und Stores einbeziehen

Da die robots.txt im Stammverzeichnis liegt, greift diese natürlich bei allen Webseiten, Stores und StoreViews gleichermaßen. Spätestens bei der Einbindung der Sitemap muss man hier aber individualisieren, da diese immer inklusive Domain angegeben wird. Zwei Lösungswege sollen hier kurz genannt sein:

  1. Die Stores werden über Unterverzeichnisse eingebunden und per Symlinks mit Magento verknüpft. In diesen Verzeichnissen kann dann eine individuelle robots.txt hinterlegt werden.
  2. Man bastelt sich per mod_rewrite und PHP eine Weiche, die nach Domain entsprechend unterschiedliche robots.txt-Dateien ausliefert. Wenn man es ordentlich macht, verpackt man das in ein Modul und knüpft es an entsprechende Konfigurationswerte im Backend (und stellt es der Community zur Verfügung).

Testen der robots.txt

Da die robots.txt frei zugänglich ist, kann man diese einfach über den Browser in jeder Webseite und jedem Shop abrufen:
http://www.domain.tld/robots.txt
Für Nutzer des Mozilla Firefox gibt es eine kleine Extension namens roboxt!, die in der Info-Leiste eine kleine Ampel anzeigt, ob die aktuell dargestellte Seite von der robots.txt der Domain blockiert ist:
roboxt
Desweiteren bietet auch Google in seinen Webmaster-Tools einige Werkzeuge und Informationen zur robots.txt an.

Fazit

Die robots.txt ist kein Wundermittel, das das Ranking bei Suchmaschinen spürbar verbessert. Aber es ist ein nützliches Detail für das Feintuning des eigenen Magento-Shops. Man muss allerdings wissen, was man tut und sollte dies mit Bedacht tun, da kleinste Tippfehler Bereiche der Webseite oder gar den gesamten Shop aus dem Index kegeln können. Wichtig wird die robots.txt, wenn man vollautomatisch den Crawlern den Weg zur XML-Sitemap weisen und diese nicht überall händisch anmelden möchte. Vielleicht gibt es hierfür in naher Zukunft ja noch ein Modul, das diese - wenn auch kleine - Lücke schließt und das Handling bei mehreren Stores vereinfacht.


Ein Beitrag von Benjamin Wunderlich
Benjamin's avatar

Benjamin Wunderlich ist Diplom-Informatiker und entwickelt mit der Shopwerft GmbH in Hamburg Magento-Shops und mit der Modulwerft kommerzielle Magento-Module. Er ist seit 2011 Veranstalter des Magento-Stammtisches in Hamburg.

Alle Beiträge von Benjamin

Kommentare
Marko am

@René Die Robotts.txt ist "für mich" ein toller Weg um Duplicate Content durch Session IDs zu vermeiden, also so veraltet finde ich das jetzt nicht. Mich wundert ehrlich gesagt, dass bei Magento von Hause aus keine integriert ist. Bei meiner SEO für Gambio sehe ich im Gegenteil zu Magento viele Vorteile, da bei Gambio schon viele Probleme gerade beim DC von Anfang an vermieden werde.

Gruß Marko

Timo am

Vielen Dank für den Hinweis. Wie man es mit mehreren Shops und .htaccess macht, habe ich hier beschrieben:

https://www.timoschindler.de/mehrere-robots-txt-fuer-unterschiedliche-shops-in-magento/

Robots-Frage am

Abgesehen von der restlichen Kritik, wie kommt man auf die Idee solche Zeilen in die Robots aufzunehmen?

Disallow: /admin/ Disallow: /app/ Disallow: /var/

Diese Verzeichnisse sollten überhaupt nicht nach außen sichtbar sein. Und /admin sollte aus Sicherheitsgründen umbenannt und auch nicht in der robots erwähnt werden. Seit 1.7 gibt es für Admin auch noch die Captcha.

Stefan am

Hallo zusammen,

Die robots.txt zu verwenden ist bei rein statischen Webseiten noch zeitgemäß. Bei dynamischen Webseiten, und hierzu zählt auch magento, ist sie mit Vorsicht zu verwenden.

Die robot.txt sperrt nur den internen Aufruf (das Lesen) der Seite, nicht das Indizieren. Interne Links der Seite werden nicht verfolgt, da der crawler sie nicht kennt (er darf die Seite ja nicht lesen). Evtl. Linkjuice geht verloren. Auch das evtl. Meta noindex kennt er nicht, da er die Seite nicht lesen darf. Soweit ist alles gut, wenn auch nicht optimal. Erfolgt nun ein externer Link auf die Seite weiß der crawler (aus der robot.txt, die in gewissen Zeitabständen neu eingelesen wird) das die Seite auf disallow (nicht lesen) steht. Sie wird also weisungsgerecht nicht gelesen (ein evtl. Meta noindex wird somit auch nicht erkannt) und ordnungsgemäß (Standard ist ohne Anweisung immer index) indiziert. Ohne Meta Description bzw. Snippet (das darf ja auch nicht gelesen werden. Die Seite erscheint also im Index (nur mit der URL). Und da bleibt sie auch bis in alle Ewigkeit, da das Meta noindex nicht gelesen (disallow) werden darf.

Magento und SEO ist ein Thema für sich. Wenn man nicht aufpasst erzeugt Magento viel doppelten content. Wie Rene schon geschrieben hat sollte ein Fokus die Canonical URL sein. Aber auch hier bietet magento von Haus aus keine optimale Lösung. Stichwort: URL mit und ohne Kategoriepfad, Produkt in verschiedenen Kategorien, usw.) Um eine einmalige Canonical URL auf einer Produktseite anzugeben muss man schon magento etwas modifizieren. Google selbst rät sogar davon ab per robot.txt den crawler auszusperren, da der content (und somit auch robots Anweisungen) sonst nie gelesen und zugeordnet werden kann. Zusammengefasst: Im Idealfall wird die robots.txt ohne disallow auskommen und die entsprechenden Seiten die nicht indiziert werden sollen haben den robots-Tag noindex, follow (nicht indizieren aber Links folgen und evtl. Linkjuice weitergeben). Im Einzelfall kann man einen abweichenden robots-Tag mit der Abfrage eines speziellen Produkt- bzw. Kategorie-Attributes in einer modifizierten head.phtml ausgeben. Für CMS Seiten und spezielle Seiten (z.B. Newsletter) bietet sich die Methode


NOINDEX,FOLLOW

in der entsprechende XML bzw. local.XML an.

Um URL mit Parametern (Suchergebnisse, Filternavigation, etc.) nicht als doppelten Content zu werten, bietet google in den Webmastertools entsprechende Ausschlussangaben an. Aber das hat Rene ja schon angedeutet.

Beispielanweisung für Parameter color in den WMT:

Parameter: color Ändert dieser Parameter den Seiteninhalt, der dem Nutzer angezeigt wird? Ja, ändert oder sortiert den Seiteninhalt oder grenzt ihn ein. Welche URLs mit diesem Parameter soll der Googlebot crawlen? Keine URLs

Somit wird verhindert das die eigentliche Produktseite (ohne Parameter) durch doppelten content ihre Priorität verliert.

So, das war es in Kürze. Ich muss ja mal wenigstens einen Kommentar los werden, bei den vielen guten Türchenbeiträgen in diesem Jahr. :-)

Viele Grüße Stefan Pröhl

Tobias Vogt am

Hallo Rene,

spannende Kritik. Falls du Lust hast das noch einmal detailliert zu formulieren schick mir doch einmal eine Mail an tobi@webguys.de :) Eventuell können wir deine Ideen etc. auch hier publizieren. Oder wir entwickeln zusammen ein Modul welches eine gute Basis-Konfigurator mitbringt.

Ist deiner Meinung nach die robots.txt total überflüssig? Weil wenn ich dem Crawler in der Seite verbiete die Seite in den Index aufzunehmen habe ich doch das gleiche Problem mit dem Links wie in der robots.txt?

Liebe Grüße

Tobi

René am

Hi ...

leider ist das mit den robots.txt der falsche Weg bzw. ein veralteter Weg. Wenn man sich den Googleindex ansieht werdet Ihr teilweise auch Snippets zu Seiten finden, die über die robots.txt ausgeschlossen wurden. Diese haben dann zwar nicht den Title und die Description der Seite, aber werden als Link aufgeführt. So etwas passiert, wenn man zwar Links auf eine durch die robots.txt gesperte Seite hat, aber dem Crawler verbietet diese Seite zu lesen. Hat man viele Filter und Kategorien kann das zu einem größeren Problem werden als ohne die robots.txt.

Wie man es besser machen kann? Man sollte Seiten, die nicht in den Index gehören mit dem MetaTag "robots" auf noindex bzw. nofollow setzten. Hat Google die Seite so einmal gelesen, wir der Crawler die Seite auch in Zukunft ignorieren. Gleichzeitig löst man das Problem mit den Zombisnippets im Index, welche sich auch nicht gerade Positiv aufs Ranking auswirken.

Weiter Themen in diesem Zusammenhang wären dann noch "Canonical" und Parameter in den Webmastertools, aber ich habe gerade kein Bock das noch weiter auszuführen.

Hoffe es hilft.

Gruß René

Dein Kommentar