Alles zu Suchmaschinen: Suchfibel Startseite


suchmaschinen


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.

Seitenanfang





Benutzerdefinierte Suche

Impressum | Hilfe | Buchbestellung



Created by 24.02.2009 ID: 235 SORT: 405 PAPA: 222
Suchfibel Home