Können die Dateien robots.txt und sitemap.xml durch eine .htaccess-Umleitung dynamisch sein?


11

Ich habe eine mehrsprachige und mehrsprachige Site. Es läuft durch eine einzigartige CMS-Installation (Drupal), so dass ich ein einziges Stammverzeichnis habe. Wenn ich also eine statische robots.txt habe, kann ich dort meines Wissens nur die Dateien für eine einzelne Domain anzeigen.

Könnte ich eine Zeile in .htaccess setzen

Redirect 301 /robots.txt /robots.php

(oder eine gleichwertige Anweisung, und bitte geben Sie an, welche, falls zulässig)

so leitet es zu einer dynamischen PHP-Datei weiter, in der ich je nach $_SERVER['HTTP_HOST']?

Und die gleiche Frage für sitemap.xml , damit ich eine dynamische sitemap.php bereitstellen kann, die unterschiedliche Links für jede unterschiedliche Domain angibt.

Das Problem ohne die Verwendung von .txt und .xml besteht, wie erwähnt, darin, dass alle Domänen ein einziges physisches Verzeichnis auf dem Servercomputer gemeinsam nutzen.


Antworten:


11

Sie können jede Datei dynamisieren. Der beste Weg, dies zu tun, ist nicht durch Weiterleitungen, sondern durch Umschreiben von Regeln.

RewriteRule ^robots\.txt$  /robots.php [L]

Auf diese Weise können Sie ein dynamisches Skript verwenden, die URL ändert sich jedoch nicht. Die meisten Crawler (einschließlich Googlebot) folgen Weiterleitungen für robots.txt , aber einige Crawler werden verwirrt, wenn Sie Weiterleitungen einführen.

Beachten Sie, dass Ihre robots.txt für jeden Crawler für jede Domäne statisch erscheinen sollte, selbst wenn Sie sie mit PHP betreiben . Es ist in Ordnung, unterschiedliche Inhalte für unterschiedliche Domänen oder sogar für unterschiedliche Benutzeragenten bereitzustellen. Das zufällige Bereitstellen unterschiedlicher Inhalte oder basierend auf der Tageszeit kann jedoch Suchmaschinen-Crawler wirklich verwirren und Ihre SEO durcheinander bringen.


Sitemaps können nach Belieben benannt werden. Sie können diese umleiten oder eine Umschreiberegel verwenden, um sie dynamisch unter derselben URL zu aktivieren. Sie können sie auch wie benennen

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-sitemap.xml

Dann verweisen Sie auf sie in robots.txt :

Sitemap: http://www.example.com/example-sitemap.xml

oder senden Sie sie manuell über ihre Webmaster-Tools oder die Suchkonsole an die Suchmaschinen.


Vielen Dank an beide für Ihre Antwort. Bitte korrigieren Sie, was ein Tippfehler sein könnte. Es ist eine w3d- Anweisung, die funktioniert hat. Der Code sollte also RewriteRule ^robots\.txt$ robots.php [L]ohne das Symbol \ sein.
Cesar

Ja, die Version mit dem Schrägstrich wäre für Ihre Datei apache.conf geeignet. Für .htaccess müssen Sie es weglassen. Ich habe die Antwort so bearbeitet, dass sie die entsprechende Version für .htaccess enthält.
Stephen Ostermiller

@Cesar Das Schrägstrichpräfix im Muster (dh ^/robots\.txt$) wäre erforderlich, wenn diese Anweisung in der Serverkonfiguration enthalten wäre, aber ja, sie stimmt nicht mit den .htaccess-Dateien pro Verzeichnis überein. Das Schrägstrichpräfix auf der Ersetzung (dh /robots.php) ist in diesem Fall optional.
MrWhite

5

Ja, genauso kann jede Anfrage "dynamisch" sein.

Sie würden jedoch nicht umleiten (wie in Ihrem Beispielcode), sondern sollten intern mit mod_rewrite neu schreiben . (Das gleiche wie das, was Drupal wahrscheinlich schon tut.)

Zum Beispiel in Ihrer .htaccess-Stammdatei:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine sollte nur einmal auftreten (obwohl es nicht wirklich wichtig ist, wenn es mehrmals auftritt).

Sie müssen nur sicherstellen, dass keine Konflikte mit anderen Anweisungen in Ihrer .htaccess-Datei auftreten. So sollte dies wahrscheinlich in der Nähe des Anfangs der Datei, auf jeden Fall vor Ihrem Front - Controller .


4

Es ist in Ordnung, die Sitemap-Datei dynamisch zu gestalten - dies ist eine gute Möglichkeit, Ihre Sitemaps automatisch zu aktualisieren.

Das Dynamisieren der robots.txt-Datei (für denselben Host! Dies für separate Hosts zu tun, ist im Wesentlichen nur eine normale robots.txt-Datei für jeden von ihnen.) Würde wahrscheinlich Probleme verursachen: Sie wird nicht jedes Mal gecrawlt, wenn eine URL von der Site gecrawlt wird Es kann also vorkommen, dass die "falsche" Version zwischengespeichert wird. Wenn Sie beispielsweise Ihren robots.txt-Dateiblock während der Geschäftszeiten crawlen lassen, wird er möglicherweise zwischengespeichert und einen Tag lang verfolgt. Dies bedeutet, dass nichts gecrawlt wird (oder alternativ zwischengespeichert wird, wenn das Crawlen zulässig ist). Google crawlt die robots.txt-Datei beispielsweise für die meisten Websites etwa einmal täglich.


Ich sehe hier keinen Unterschied zwischen statisch oder dynamisch. Ich würde den dynamischen Teil auch verwenden, um verschiedene Versionen für verschiedene Hosts anzubieten, aber da alle Hosts dasselbe physische Verzeichnis auf dem Computerserver verwenden, ist dies eine Möglichkeit, robots1.txt, robots2.txt, robots3.txt (Zahlen) zu haben was bedeutet, in welchem ​​Bereich wir sind).
Cesar

Ich denke nicht, dass Dynamik hier bedeutet, dass sie jedes Mal andere Inhalte bereitstellen möchten. Sie möchten es nur über PHP betreiben, damit sie Entscheidungen basierend auf dem Hostnamen im PHP-Code treffen können. Ich mache robots.txt oft dynamisch, um verschiedenen Benutzeragenten unterschiedliche Regeln zu liefern.
Stephen Ostermiller

2
Ja, wie ich bereits erwähnt habe, ist es für mehrere Hosts im Wesentlichen so, als hätte man separate robots.txt-Dateien pro Host, was in Ordnung ist. Manchmal sehen wir jedoch Websites, die versuchen, das Crawlen nach Tageszeit mithilfe einer dynamischen robots.txt-Datei zu steuern - dies verursacht viele Probleme.
John Mueller

Guter Punkt. Ich habe meine akzeptierte Antwort mit der Warnung bearbeitet, robots.txt nicht sehr dynamisch zu machen.
Stephen Ostermiller

0

Es ist nicht erforderlich, sitemap.php zu erstellen, weil: 1. Für jede Sprache können Sie eine separate sitemap.xml-Datei ausführen und jede in Suchmaschinenkonsolen angeben. 2. Standard-Sitemap-Dateien können regelmäßig neu geschrieben werden, um aktuelle Inhalte einzuschließen, und sie werden dadurch dynamisch - dafür ist .php nicht erforderlich. Es liegt am internen Aktualisierungsmechanismus und am Cron, dieselbe Datei mit der Standarderweiterung .xml neu zu erstellen

Sitemap.xml-Dateien sind statisch und werden nur durch Aktualisierungen dynamisch - sie werden nicht in Echtzeit aktualisiert. Es ist möglich, dass sie jede Minute neu geschrieben werden, aber es ist nicht erforderlich, weil: 1. Google es nicht in weniger als 1 Stunde seit der letzten Übermittlung überprüft. 2. Wenn Sitemap-Dateien groß sind, schreiben Sie sie neu oft wird die Serverleistung kaputt machen.

Wenn ein großes Datenvolumen vorhanden ist und die Sitemap-Datei größer als 50 MB ist, ist ein System mit mehreren Sitemaps erforderlich. Dies bedeutet, dass sitemap2,3 ... .xml zur Liste der Hauptdatei hinzugefügt wird. Der Inhalt dieser Dateien bleibt jedoch auch unverändert, bis diese Dateien neu erstellt werden (z. B. von cron).

Zu erwähnen ist auch, dass eine Suchmaschine, sobald sie auf die Datei zugegriffen hat, nicht sehr schnell wieder darauf zurückkehrt (es sei denn, dies erfolgt manuell). Es wird bestätigt, dass es auf keinen Fall erforderlich ist, eine Echtzeitaktualisierung von sitemap.php zu erstellen, da eine normale sitemap.xml für sich genommen dynamisch sein kann und den ganzen Tag oder eine Woche lang mit neuen Inhalten aktualisiert wird.

Ich kann mir keine Profis vorstellen, die eine sitemap.php verwenden. Es wird nichts nützen, da es andere bessere / richtige Möglichkeiten gibt, diese Dateien zu verwenden.


Einige Gründe, warum Dynamik bevorzugt werden könnte: Sitemaps beanspruchen viel Speicherplatz, während dynamisches Generieren keinen beansprucht. Sitemaps müssen auf dem neuesten Stand gehalten werden, und dynamische Sitemaps könnten eine einfache Möglichkeit sein, dies zu tun.
Stephen Ostermiller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.