15.05.2015, 21:49
Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2016, 13:26 von Arne Drews.
Was versteht man unter Suchmaschinen optimierten URL's?
Unter einer Suchmaschinen optimierten ( SEO-friendly ) URL versteht man im allgemeinen eine URL mit prägnanten keywords für Suchmaschinen á la Google & Co.
Kurz gesagt, können wir unsere Seiten bereits mit Hilfe der URL für die großen Suchmaschinen interessant machen.
Google bspw. wertet eine Seite mit prägnanten Suchbegriffen höher in der Ergebnisliste, als die Seiten, auf denen die Suchbegriffe "nur" im Content enthalten sind. Natürlich dürfen wir den Content nicht vernachlässigen, denn die URL ist nur einer von vielen Faktoren für die Ergebnisbewertung, wenn auch ein sehr wichtiger.
Der Aufbau unserer SEO-friendly URL
Wir nehmen für dieses kleine Tutorial mal an, daß wir eine Seite unserer Website speziell für PHP-Tutorials haben und diese für die Suchmaschinen optimieren wollen.
Uns interessiert hier erstmal nur der Aufbau der URL.
Nehmen wir also an, wir legen folgende URL für ein Tutorial wie dieses fest:
Damit haben wir eine URL, die über prägnante Suchbegriffe verfügt. Angezeigt werden soll allerdings eine Seite, die in unserem Webspace hier liegt:
Muß meine Webstruktur entsprechend der URL aufgebaut sein?
Nein, natürlich nicht. Der ganze Trick ist einfach, die Anfrage intern umzuleiten und den entsprechenden Content vorzublenden. Was sich so einfach anhört, ist in Wirklichkeit auch beinahe so leicht, wie es sich liest.
Um das entsprechend umzusetzen, reicht prinzipiell eine
Uns reicht wie gesagt fürs erste eine
Der Webserver
Die erste wichtige Aufgabe übernimmt der Webserver, indem er die Anfrage intern umleitet. Dazu haben wir beim Apache zwei Möglichkeiten. Eine weit verbreitete und schlanke Lösung, die auch in großen Frameworks Anwendung findet bietet uns das
Diese Zeilen tragen wir in die
Im Grunde sind die letzten drei Zeilen für uns interessant. Diese teilen dem Webserver mit, daß alle Anfragen, die physikalisch nicht als Datei oder Verzeichnis existieren auf die
Aber es gibt da noch was:
Mit
Lange Rede, kurzer Sinn: Das was unsere erste Variante macht, erreichen wir ebenfalls stattdessen auf diese Weise:
Die erste Zeile sorgt dafür, daß vererbte FallbackResource-Einstellungen aus dem Elternverzeichnis deaktiviert werden. Diese ist nur wichtig, wenn es sich nicht gerade um die htaccess im Webroot handelt. Im Normalfall reicht die zweite Zeile alleinstehend.
...und weiter gehts!
Welche der beiden Varianten ihr oben verwendet spielt für den weiteren Verlauf des Tutorials keine Rolle, ihr habt da vollkommene Entscheidungsfreiheit.
Wir gehen also für den Moment davon aus, daß das Verzeichnis
Die Anfrage landet also aufgrund unserer
Und wie gebe ich nun den richtigen Content aus?
Nun, auch das ist relativ einfach. PHP verwaltet Server-Variablen in dem Superglobalen Array
Unsere Information finden wir unter dem Index
Es gibt natürlich verschiedene Möglichkeiten dies umzusetzen, für unser kleines Tutorial soll eine kleine
Die Funktion pathinfo() versucht aus dem übergebenen Pfad Details zum Pfad ( hier
Der Code macht also nun nichts weiter, als das Verzeichnis auszuwerten und die gewünschte Datei per
Wie man sieht, es ist relativ einfach SEO-friendly URL's in eigenen Projekten zu verwenden.
Der PHP-Teil ist je nach Projekt sicher anders umgesetzt, aber zur Erklärung im Rahmen dieses Tutorials soll das ausreichend sein.
Unter einer Suchmaschinen optimierten ( SEO-friendly ) URL versteht man im allgemeinen eine URL mit prägnanten keywords für Suchmaschinen á la Google & Co.
Kurz gesagt, können wir unsere Seiten bereits mit Hilfe der URL für die großen Suchmaschinen interessant machen.
Google bspw. wertet eine Seite mit prägnanten Suchbegriffen höher in der Ergebnisliste, als die Seiten, auf denen die Suchbegriffe "nur" im Content enthalten sind. Natürlich dürfen wir den Content nicht vernachlässigen, denn die URL ist nur einer von vielen Faktoren für die Ergebnisbewertung, wenn auch ein sehr wichtiger.
Der Aufbau unserer SEO-friendly URL
Wir nehmen für dieses kleine Tutorial mal an, daß wir eine Seite unserer Website speziell für PHP-Tutorials haben und diese für die Suchmaschinen optimieren wollen.
Uns interessiert hier erstmal nur der Aufbau der URL.
Nehmen wir also an, wir legen folgende URL für ein Tutorial wie dieses fest:
Code:
http://www.example.com/php-tutorials/seo-friendly-urls-mit-php.html
Code:
/view/tutorials/seo-friendly-urls-mit-php.php
Muß meine Webstruktur entsprechend der URL aufgebaut sein?
Nein, natürlich nicht. Der ganze Trick ist einfach, die Anfrage intern umzuleiten und den entsprechenden Content vorzublenden. Was sich so einfach anhört, ist in Wirklichkeit auch beinahe so leicht, wie es sich liest.
Um das entsprechend umzusetzen, reicht prinzipiell eine
index.php
. In größeren Projekten kommt auch eine bootstrap.php
zum Einsatz, aber das soll für dieses Tutorial mal ignoriert werden.Uns reicht wie gesagt fürs erste eine
index.php
im Webroot.Der Webserver
Hinweis
Der folgende Abschnitt bezieht sich auf einen Apache HTTP Server ab Version 2.2 mit aktiviertemmod_rewrite
! Sollte die Datei .htaccess
nicht existeren, muß diese zuvor angelegt werden.mod_rewrite
Modul:Code:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
.htaccess
im Webroot ein. Diese sorgen für die interne Umleitung.Im Grunde sind die letzten drei Zeilen für uns interessant. Diese teilen dem Webserver mit, daß alle Anfragen, die physikalisch nicht als Datei oder Verzeichnis existieren auf die
index.php
geleitet werden.Aber es gibt da noch was:
FallbackResource
Mit
FallbackResource
teilen wir dem Webserver mit, daß es einen sog. Fallback für nicht existente Dateien und Verzeichnisse gibt. Der Webserver nutzt diese FallbackResource
und umgeht gleichzeitig einen 404. Im Prinzip also genau das, was wir oben gemacht haben, nur in einer Anweisung.FallbackResource
ist weniger bekannt/verbreitet, wie die erste Variante, aber meiner Meinung nach die sinnvollere und vermutlich auch die performantere Lösung.Lange Rede, kurzer Sinn: Das was unsere erste Variante macht, erreichen wir ebenfalls stattdessen auf diese Weise:
Code:
FallbackResource disabled
FallbackResource /index.php
Hinweis
DieFallbackResource
Direktive liefert uns der Apache ab Version 2.2.16. Die Direktive ist allerdings kein Bestandteil des mod_rewrite
Modul, sondern dem mod_dir
Modul. Ich denke, ein Grund, warum es unbekannter ist, denn jeder der sich mit URL-Rewriting befasst, liest sich assoziativ verständlicher Weise zuerst mal in die Möglichkeiten des mod_rewrite
Moduls ein, wo FallbackResource
nicht zu finden ist. Den Parameterwert disabled
gibt es für FallbackResource
übrigens ab der Version 2.2.24 des Apache HTTP Servers!...und weiter gehts!
Welche der beiden Varianten ihr oben verwendet spielt für den weiteren Verlauf des Tutorials keine Rolle, ihr habt da vollkommene Entscheidungsfreiheit.
Wir gehen also für den Moment davon aus, daß das Verzeichnis
php-tutorials/
aus unserer URL nicht existiert.Die Anfrage landet also aufgrund unserer
.htaccess
Konfiguration aus dem oberen Abschnitt in der index.php
.Und wie gebe ich nun den richtigen Content aus?
Nun, auch das ist relativ einfach. PHP verwaltet Server-Variablen in dem Superglobalen Array
$_SERVER
, auf das wir nun zugreifen können.Unsere Information finden wir unter dem Index
REQUEST_URI
. Diesen werten wir aus und laden den entsprechenden Content einfach in die index.php
.Es gibt natürlich verschiedene Möglichkeiten dies umzusetzen, für unser kleines Tutorial soll eine kleine
switch ... case
Fallentscheidung genügen:PHP-Code:
$aPath = pathinfo( $_SERVER['REQUEST_URI'] );
switch ( $aPath['dirname'] ) {
case '/php-tutorials':
$sIncludePath = '/view/tutorials/';
break;
default:
$sIncludePath = '/view/content/';
break;
}
include_once __DIR__ . $sIncludePath . $aPath['filename'] . '.php';
$_SERVER['REQUEST_URI']
) zu extrahieren und stellt diese dann in den Elementen dirname
, basename
, extension
und filename
zur Verfügung. Uns sollen im Moment nur dirname
und filename
dabei interessieren. Konnten die Informationen gesammelt werden finden wir in $aPath['dirname']
den Verzeichnispfad ( in unserem Beispiel: php-tutorials ) und in $aPath['filename']
den reinen Dateinamen ohne(!) Erweiterung ( hier: seo-friendly-urls-mit-php ).Der Code macht also nun nichts weiter, als das Verzeichnis auszuwerten und die gewünschte Datei per
include_once
einzubinden.Wie man sieht, es ist relativ einfach SEO-friendly URL's in eigenen Projekten zu verwenden.
Der PHP-Teil ist je nach Projekt sicher anders umgesetzt, aber zur Erklärung im Rahmen dieses Tutorials soll das ausreichend sein.