Suchfibel
/ Gastbeiträge
/ PHP-Seiten und Suchmaschinen
PHP-Seiten und Suchmaschinen
Tobias Ratschiller
Das Problem
Ob eCommerce-Anwendung, web-basierter Terminplaner, oder personalisierte Portal-Seite - oft
werden dynamische Seiten spezifisch für einen Benutzer generiert. Web-Anwendungen vergeben zum Beispiel häufig
eine Session-ID, um einen Benutzer eindeutig identifizieren zu können. Eine URL sieht dann beispielsweise so aus:
http://www.foo.com/skript.php3?ID=b6ac8ca8e453cdc43e6078abf044cdb5
Dies ermöglicht es, den Benutzer über mehrere getrennte Seiten hinweg wiederzuerkennen -
und beispielsweise seinen Warenkorb in einem Online-Shop anzuzeigen.
Für eine Suchmaschine macht es wenig Sinn, den Inhalt einer solchen Seite zu indizieren: Meist läuft die Session
nach einer bestimmten Zeit ab oder der Inhalt der Seite ist zu einem späteren Zeitpunkt nicht mehr nachvollziehbar.
Aus diesem Grund indizieren viele Suchmaschinen prinzipiell keine Seiten, deren Adresse (URL) nach "Dynamik" aussieht.
Dazu zählen zum Beispiel Adressen, in denen "cgi-bin", ".pl", "?" oder "&" vorkommen.
Manche Suchmaschinen lassen auch einfach die Parameter ("?ID=") weg und rufen bloß die Seite auf ("script.php3").
Dieses durchaus nachvollziehbare Verhalten führt allerdings zu einem Problem:
Viele größere Sites generieren nämlich alle Seiten dynamisch, zum Beispiel mit Inhalten aus einer Datenbank.
Diese sollten selbstverständlich von Suchmaschinen indiziert werden. Wie bereits dargestellt, gibt es aber Probleme mit URLs wie
http://www.foo.com/script.php3?category=PHP.
Roboter austricksen
Nun sind aber auch die Roboter der Suchmaschinen normale HTTP-Clients und sehen keineswegs,
wie eine Seite server-seitig erzeugt wird. Und mit PHP lässt sich so ziemlich alles erzeugen, was von einem Webserver
an den Client gesendet werden kann. Um dynamisch erzeugte Seiten indizierbar zu machen, genügt es demnach,
dem Such-Roboter vorzuspiegeln, daß die Seite statisch ist. Anstatt der Endung ".php3" für von PHP erzeugte Seiten,
vergeben Sie also beispielsweise die Endung ".html". Die URL des Beispielsskripts sieht nun so aus:
http://www.foo.com/script.html?category=PHP. Ruft eine Suchmaschine die Seite ohne Parameter auf, sollte eine entsprechende Standard-Seite
ausgegeben werden. Das funktioniert gut mit Seiten, die keine Parameter benötigen. Oft möchten Sie aber tatsächlich den Inhalt indizieren,
der mit einem bestimmten Parameter zurückgeliefert wird. Ein Artikel aus der Kategorie "PHP" ist schließlich komplett anders als
ein Artikel aus der Kategorie "Perl": Der Parameter "category" ist also durchaus wichtig.
Der Entwickler muss also eine andere Möglichkeit finden, Parameter zu übergeben.
Folgendes simuliert zum Beispiel eine statische HTML-Seite: http://www.foo.com/script.html/PHP/.
Für den Roboter sieht das wie eine normale Verzeichnisstruktur aus: Die Pfadkomponente dieser URL ist /script.html/PHP/.
Der Webserver führt aber das Skript "script.html" aus. Den Parameter "PHP" extrahiert man dann manuell
aus der Verzeichnisumgebung ($PATH_INFO). Etwas eleganter: Apache kann einer Datei explizit einen MIME-Typ zuweisen.
Das Skript nennen Sie also einfach "script" (ohne Endung) und weisen ihm mit Apaches "Force-Type"-Direktive den Typ
application/x-httpd-php3 zu. Die URL des Skripts lautet nun http://www.foo.com/script/PHP/,
der Parameter wird wiederum aus dem Pfad ausgelesen. Alle Suchmaschinen indizieren eine solche Seite problemlos,
weil kein Unterschied zu statischen HTML-Seiten mehr vorhanden ist.
Zaubern mit Mod_Rewrite
Auf das manuelle Auswerten der Verzeichnisumgebung kann man mit Mod_Rewrite verzichten.
Mit Ralf S. Engelschalls Modul können URLs on-the-fly umgeschrieben werden; weil man für
diese Rewrite-Rules (also die Anweisungen, nach denen URLs transformiert werden sollen)
Reguläre Ausdrücke benutzen kann, ist mit Mod_Rewrite so ziemlich alles machbar,
was man sich für URLs denken kann. Weitere Informationen dazu finden Sie in der
Dokumentation unter http://www.apache.org/docs/mod/mod_rewrite.html.
Bitte beachten Sie, daß dieses modul nicht standardmäßig mit dem Apache kompiliert wird;
sie müssen dem configure-Skript folgende Anweisung übergeben, um mod_rewrite mitzukompilieren:
--activate-module=src/modules/standard/mod_rewrite.o
Für unseren Gebrauch genügen einige einfache Rewrite-Rules.
Zuerst muss die Rewrite-Engine angeschalten. Dazu schreiben Sie in eine .htacces-Datei folgende Konfigurationsdirektive: RewriteEngine on
Mit der folgenden Regel in der -htaccess-Datei transformieren Sie alle URLs der Form news <id>.html in shownews.php3?id= <id> -
news01.html wird so zu shownews.php3?id=01:
RewriteRule ^news(.*)\.html$ shownews.php3?id=$1
Ihr Skript greift dann wie üblich auf die Variable $id zu. Der
Browser des Benutzers merkt von dieser Umwandlung nichts - führ ihn
heißt die Datei immer noch news01.html.
Ein anderes Beispiel:
RewriteRule ^(.*).html$ shownews.php3?id=$1
Diese Zeile macht URLs wie foo.html zu shownews.php3?id=foo.
Fazit
Mit einigen Tricks lassen sich Spider und Roboter einfach statische Seiten vorgaukeln,
die sie dann wie üblich indizieren. Die in diesem Artikel vorgestellten Methoden lassen sich einfach
in eigene Skripts einbauen und funktionieren mit entsprechender Adaption auch problemlos mit anderen server-seitigen Skriptsprachen.
Autor
Tobias Ratschiller ist Berater für Neue Medien, mit dem Spezialgebiet in der Umsetzung von großen dynamischen Web-Sites.
Zur Zeit schreibt er zusammen mit Till Gerken das Buch "Web Application Development With PHP", das im Mai 2000 beim Verlag New Riders erscheinen wird.
Tobias´ Website ist http://phpWizard.net.
|