URL dieses Artikels:

zu Ausgabe: 11.2003
Wer suchet, der findet
Suchmaschinenoptimierung mit PHP und MySQL
von Philipp von der Born und Christian Engelke
Suchmaschinenoptimierung verfolgt das Ziel, Webseiten auf bestimmte Suchbegriffe zu optimieren, sodass diese später von potenziellen Kunden oder Interessenten in Suchmaschinen auf den ersten Seiten gefunden werden können. In dieser zweiteiligen Artikelserie beschäftigen wir uns mit der Optimierung von Webseiten mithilfe von PHP-MySQL-Lösungen.

Einführung
Das Ziel von Optimierungen ist es, qualifizierte Besucher, also Besucher, welche mit Ihnen über Ihre Webseite in irgendeiner Weise in Dialog treten, zu gewinnen. Um qualifizierte Besucher (Qualified Traffic) zu erzeugen, gibt es eine Reihe von Möglichkeiten, angefangen bei der einfachen Optimierung der jeweiligen Webseite (Metatags, contentPages) über die Schaltung von bezahlten Suchergebnissen (Sponsored Links) bis hin zu kostenpflichtigen Bannerschaltungen (Pay per Click).

In diesem Artikel werden wir Ihnen kurz die theoretischen Grundlagen der Suchmaschinenoptimierung erläutern. Aus Platzgründen fassen wir die theoretischen Aspekte kurz und weisen am Ende des Artikels auf ausführlichere Quellen hin. Im praktischen Teil zeigen wir Ihnen, wie Sie mithilfe von PHP und MySQL Ihre eigene individuelle Lösung für die Optimierung Ihrer Website entwickeln können. Mit dem von uns vorgestellten Beispiel möchten wir Ihnen zeigen, wie man mit einer dynamischen Lösung auf einfache Weise contentPages erstellen kann, um die Auffindbarkeit Ihrer Website zur verbessern. Den praktischen Teil des Artikels werden wir intensiver behandeln.

Einer ist immer auf dem ersten Platz
Wenn wir von Suchmaschinenoptimierung sprechen, ist in den meisten Fällen eine Optimierung Ihrer Seite für die Suchmaschine Google gemeint. Google hat in letzter Zeit immer mehr an Bedeutung gewonnen und bringt inzwischen den meisten Traffic. Selbstverständlich kann man Webseiten auch speziell für andere Suchmaschinen optimieren, jedoch ist der Aufwand häufig größer als der Nutzen, sodass sich dieser in der Regel nicht lohnt, da die für Google optimierten Seiten in anderen Suchmaschinen auch verhältnismäßig gut gefunden werden. Andere fach- bzw. branchengebundene Suchmaschinen oder Webverzeichnisse sind jedoch nicht zu verachten und können qualifizierten Traffic bringen, da potenzielle Interessenten eines Fachgebietes diese Verzeichnisse ansteuern. Im Gegensatz zu herkömmlichen Werbemaßnahmen oder Marketing-Kampagnen soll Suchmaschinenoptimierung keine Bedürfnisse im Konsumenten wecken, sondern bereits vorhandene Bedürfnisse decken.

Jede Suchmaschine benutzt andere Ranking-Algorithmen, welche die Reihenfolge der Suchergebnisse bestimmen. Für die Relevanz wird der HTML-Quelltext der einzelnen Seiten auf bestimmte Kriterien wie den Dateinamen, Titel, <H1>- und <H2>-Tags (Überschrift), Bilder, Bildüberschriften (Alt-Tags) sowie auf Worthäufigkeiten, Querverlinkungen und anderen zum Großteil unbekannten Kriterien für den Suchbegriff analysiert. Taucht der Suchbegriff in den oben genannten Kriterien auf, so verbessert dies die Relevanz und die Seite erscheint weiter oben in den Suchergebnissen.

Externe Faktoren wie die Linkpopularität (Link Popularity), bei der die Links gezählt werden, die von anderen Seiten auf die eigene Seite verweisen, gewinnen immer mehr an Bedeutung. Je mehr Links auf die eigene Seite verweisen, desto relevanter (weiter oben) ist die Seite in den Suchergebnissen. Neben der Linkpopularität gibt es noch das PageRank, welches von Google erfunden wurde. Das PageRank weist jeder Seite einen Wert von 0 (unrelevant) bis 10 (sehr relevant) zu. Eine Internet-Seite erhält somit einen höheren PageRank, wenn bedeutende Seiten auf diese verweisen (Näheres in den unten angegebenen Quellen).

Zusammengefasst lässt sich sagen: Einer ist immer auf dem ersten Platz, nämlich der, dessen Webseite die größte Relevanz für den Suchbegriff aufweist. Die eigene Seite auf den ersten Platz zu bekommen ist nicht einfach und auch nicht unbedingt notwendig. Je nach Konkurrenzsituation ist eine Platzierung auf der ersten, bzw. der zweiten Seite der Suchergebnisse sehr gut.

Problematiken
Da sich eine Webseite logischerweise nicht auf unzählig viele Begriffe optimieren lässt, ohne dass die Relevanz darunter leidet, sollte man jede Inhaltsseite auf inhaltlich passende Begriffe oder Begriffskombinationen optimieren. So könnte die Startseite auf den Firmennamen, die Branche und den Herkunftsort optimiert werden. Seiten, die real vorhanden sind, wie z.B.: index.html, produkte.html, ueber_uns.html lassen sich ohne weiteres optimieren.

Nicht real existierende Seiten, so z.B. aus einer Datenbank dynamisch erzeugte Newsbereiche oder Online-Shops lassen sich nicht ohne weiteres optimieren, da Suchmaschinen sich zum Teil damit schwer tun, Dateien mit Parametern wie z.B. www.firma.de/shop.php?kategorie=4&produkt_id=251/ zu indexieren. Sie haben selbstverständlich auch hier die Möglichkeit, in der Datei, welche die Seite für den Browser erstellt (in diesem fall shop.php), Optimierungen vorzunehmen. Ob Ihre 100, 200 oder auch 5.000 Produkte oder dynamisch erzeugte News dann in eine Suchmaschine aufgenommen werden, ist jedoch fraglich und evtl. von externen Faktoren wie der Link Popularity oder dem PageRank abhängig.

Wir können und möchten keine konkreten Aussagen darüber treffen, welche Verfahren funktionieren oder nicht funktionieren. Suchmaschinen verändern ständig ihre Suchalgorithmen und teilen dies nur in den seltensten Fällen der Öffentlichkeit mit. Wer heute auf Platz eins ist, kann morgen schon komplett aus dem Suchindex gestrichen sein, weil die verwendete Optimierungsmethode nun neuerdings als Spam gewertet wird. Was bei der Optimierung der eigenen Seiten erlaubt ist und was nicht, das kann man bei den jeweiligen Suchmaschinen nachlesen. Google z.B. bietet eine Richtlinie für Webmaster an: www.google.de/intl/de/webmasters/guidelines.html.

Verstoß gegen die Regeln
Verschiedene Faktoren sollten generell bei der Optimierung von Webseiten beachtet werden, damit die Suchmaschinen die Seiten in irgendeiner Weise aufnehmen. Aus diesem Grund sollten Sie unter anderem folgende Dinge möglichst vermeiden:
  • versteckte Texte (Textfarbe ähnlich Hintergrundfarbe)
  • 1-Pixel-Links
  • JavaScript-Weiterleitungen
  • besonders häufige Wortwiederholungen
  • selbst kreierte Tags ()
  • Verlinkung von mehren Domains; Domain 1 linkt auf Domain 2 und Domain 2 linkt auf Domain 3
  • Cloaking (Suchmaschine bekommt andere Daten)
  • Frames
Ebenfalls gefährlich sind Doorways. Dies sind auf wenige Wörter optimierte Seiten, die genau für diese Suchwörter gut in Suchmaschinen gefunden werden sollen. Diese Seiten haben meist ein einfaches Aussehen und basieren auf Schablonen. Erstellt werden sie per Hand, per Software, aber auch über Internet-Scripts. Oft beinhalten diese Seiten Weiterleitungen, damit man später automatisch auf die richtige Seite kommt. Viele Webmaster locken Besucher mit Begriffen an, die mit dem eigentlichen Inhalt der Seite nichts zu tun haben.

Webseitenoptimierung macht unserer Meinung nach nur Sinn, wenn bei der Optimierung suchmaschinenkonforme Techniken verwendet werden, sodass gute Platzierungen auf lange Sicht gewährleistet werden können. Ein hohes Risiko, nur um wenige Wochen oder nur Tage auf Platz eins zu sein (z.B. mittels Cloaking), macht wenig Sinn, wenn die Domain danach für immer aus dem Suchindex gebannt wird.

Suchmaschinenoptimierung für Online-Shops
Für ein praktisches Beispiel möchten wir mittels PHP und MySQL automatisch Seiten für die Produkte eines Shops generieren. Im Prinzip kann man bei den von unserem Script erstellten Seiten nicht von Doorway Pages sprechen, da diese der Begrifflichkeit nach als Eingangsseiten die Aufgabe haben, Besucher aktiv oder passiv auf die Startseite oder einzelne Bereiche der eigenen Webseite zu leiten. Wir bezeichnen unsere Seiten als contentPages. Unsere Absicht ist es, Besuchern und Suchmaschinen Content aus der Datenbank zu liefern, den diese sonst möglicherweise nicht zu Gesicht bekämen. Der Kunde, der auf unsere generierte Seite kommt, sieht das, wonach er gesucht hat. Wir stellen unsere dynamischen Seiten lediglich in statischer Form als Bestandteil des Shops zur Verfügung.

Als Vorlage benutzen wir aus der Datenbank eines OsCommerce Shops (www.oscommerce.de/) die Tabellen products und products_description. Die Vorgehensweise ist recht einfach. Durch eine MySQL-Abfrage lassen wir uns alle Produkte mit zugehörigen Informationen zurückliefern. Anhand dieser Daten werden wir unsere contentPages mit dem passenden Inhalt füllen. Für die Anzeige des eigentlichen Content benutzen wir ein Template. Die Vorteile liegen klar auf der Hand. Zum einen lassen sich durch Anpassen dieses einzigen Templates alle contentPages verändern. Zum anderen wird auf dem Server wesentlich weniger Speicherplatz belegt, da die eigentlichen Seiten nur Variablen mit Daten enthalten. Sobald wir alle Daten ermittelt haben, werden wir für jedes Produkt eine eigene Datei erstellen, wobei sich der Dateiname an dem Produktnamen orientiert. Bevor wir in die tiefe Materie stoßen, möchten wir Ihnen zum besseren Verständnis eine kurze Beschreibung der benötigten Tabellen liefern, damit Sie besser nachvollziehen können, wie die Abfrage funktioniert, und später in der Lage sind, selbst Abfragen auf andere Datenbanksysteme anpassen können.
Die Bedeutungen der Tabellen sollten anhand der gut beschrifteten Spalten klar erkennbar sein. Zur Vorführung nehmen wir allerdings nur die wichtigsten Informationen, nämlich die in den Tabellen fett hervorgehobenen. Sie selbst entscheiden später, welche Daten für Sie am besten in Frage kommen, weil Sie die Bedürfnisse Ihres Kunden kennen. Unsere Produktinformationen befinden sich in zwei Tabellen. Deshalb benötigen wir eine komplexere Datenbankabfrage. Da beide Tabellen die Spalte products_id enthalten, nutzen wir diesen Wert um beide Tabellen zu verknüpfen (Join). Aus diesem Anlass ergibt sich somit die Abfrage in Listing 1.

Listing 1

$res = mysql_db_query($db_name, "SELECT products.products_id, products.products_price, products.products_image, products_description.products_name, products_description.products_description FROM products INNER JOIN products_description ON products.products_id = products_description.products_id");

Bevor die Anweisung ausgeführt wird, sollte bereits eine Verbindung zur Datenbank bestehen. Die MySQL-Abfrage ist einfach aufgebaut. Nach dem SELECT werden alle Datensätze angeben, die abgefragt werden sollen. Vor der jeweiligen Spalte geben wir noch die zugehörige Tabelle an. Nach dem FROM folgt die erste Tabelle. Die zweite Tabelle geben wir nach dem INNER JOIN an. Zuletzt bestimmen wir nach dem ON die beiden Spalten beider Tabellen, die verknüpft werden sollen. Im nächsten Schritt können die Daten weiter verarbeitet werden (siehe Listing 2).

Listing 2

while ($row = mysql_fetch_array($res))
{
echo "contentPage für " . $row[products_name] . " wurde generiert.<br>";

// Dateinamen entwerfen
$file_name = $row[products_name];
$file_name = ereg_replace("ü","ue",$file_name);
$file_name = ereg_replace("ö","oe",$file_name);
$file_name = ereg_replace("ä","ae",$file_name);
$file_name = preg_replace('/[^0-9a-z]/i','_',$file_name);
$file_name = ereg_replace("__","_",$file_name);
$file_name = ereg_replace("__","_",$file_name);
$file_name = $file_name . ".php";

// Informationen in die Datei schreiben
$files[] = $file_name;
$fp = fopen($file_name, "w+");
fwrite($fp, "<?\n");
fwrite($fp, "\$products_id = '$row[products_id]';\n");
fwrite($fp, "\$products_name = '$row[products_name]';\n");
fwrite($fp, "\$products_description = '$row[products_description]';\n");
fwrite($fp, "\$products_image = '$row[products_image]';\n");
fwrite($fp, "\$products_price = '$row[products_price]';\n");
fwrite($fp, "require 'template.php';\n");
fwrite($fp, "?>");
fclose($fp);
chmod ($file_name, 0777);
}

Aus dem Produktnamen wird der Dateiname erstellt. Um sicherzugehen, dass im Dateinamen keine Sonderzeichen benutzt werden, ersetzen wir diese alle durch das Unterzeichen ( _ ). Damit nicht mehrere Unterzeichen nacheinander folgen, ersetzen wir zuletzt jeweils zwei Unterzeichen durch eines. Als letzten Schritt in dieser Prozedur ändern wir die Endung der Datei auf .php. Anschließend fügen wir den Dateinamen einem Array hinzu. Die Bedeutung des Arrays werden wir uns später zunutze machen. Endlich können wir unsere contentPages mit den Daten füllen. Beachtenswert ist, dass wir in unsere contentPages direkt PHP-Quelltext nach der Syntax $variable = "value"; schreiben. Das Dollarzeichen vor der Variablen sorgt dafür, dass direkt der Name der Variable eingefügt wird und nicht deren Inhalt. Zuletzt lassen wir das Template, dem wir uns gleich widmen, mittels require aufrufen. Sollten Sie das Script auf Ihrem Webserver ausführen, so setzen Sie bitte mittels chmod die entsprechenden Dateirechte. Wir haben bereits alle Namen der erstellten contentPages in ein Array geschrieben. Dies auch nicht ohne Hintergedanken. Unser Ziel ist es, eine weitere Seite (produkte.html) generieren zu lassen, die Links zu allen erzeugten Seiten erhält (siehe Listing 3).

Listing 3

$fp2 = fopen("produkte.html", "w+");
fwrite($fp2, "<html>\n");
fwrite($fp2, "<head>\n");
fwrite($fp2, "<title>Unsere Produkte in Übersicht</title>\n");
fwrite($fp2, "</head>\n");

foreach ($files as $value)
{
fwrite($fp2,"<a href='$value'>$value</a>\n");
}

fwrite($fp2, "</body>\n");
fwrite($fp2, "</html>\n");
fclose($fp2);
chmod ("produkte.html", 0777);

In diesem Falle haben wir direkt den HTML-Quelltext in die Datei geschrieben. Diese Seite besteht jetzt nur aus den wichtigsten Elementen. Sie haben nachher die Aufgabe, diese Datei vom Design her anzupassen. Dabei müssen Sie hierbei nicht unbedingt den ganzen HTML-Quelltext von PHP erzeugen lassen. Es wird Ihnen leichter fallen, wenn Sie die erstellte Seite einfach mit einem HTML-Programm (z.B. Macromedia Dreamweaver) nachbearbeiten. Jetzt sind unsere contentPages fertig. Alles was uns jetzt noch fehlt, ist ein Template für das optimale Design. Hierfür öffnen Sie am besten ein HTML-Programm und erstellen eine Datei namens template.php. In diesem Template können Sie nun Ihre contentPage so gestalten, wie Sie wünschen. Es stehen Ihnen jetzt folgende Variablen zur Verfügung, die Sie in Ihrem Template einbauen können:

Listing 4

<? echo $products_id; ?>
<? echo $products_name; ?>
<? echo $products_description; ?>
<? echo $products_image; ?>
<? echo $products_price; ?>

Da die Werte der Variablen in Ihren contentPages stehen und anschließend das Template aufgerufen wird, haben Sie kompletten Zugriff auf die Variablen. Beim Bild empfiehlt es sich, vorher zu prüfen, ob dies überhaupt existiert.

if (file_exists($products_image) == TRUE)

Unsere contentPages sind sicherlich noch nicht perfekt und könnten um einiges erweitert werden. Ziel des Artikels ist, dass Sie sich selbst eine Lösung auf Ihre Bedürfnisse zusammenschneiden. Erweiterungspunkte wären z.B. verwandte Produkte. Sie könnten in der contentPage noch weitere Produkte aus der Kategorie des aktuellen Produkts verlinken. Ferner könnten Sie andere Informationen zur Verfügung stellen. Wenn Sie viele Produkte haben, sollten Sie nicht alle aus einer Datei verlinken, sondern mehre Dateien anlegen. Empfehlenswert sind nicht mehr als 60 Links pro Datei. Ein Sitemap zur Verlinkung ist immer interessant. Wichtig ist, dass die contentPages vom Design her zum Shop passen, da Sie ja ein Bestandteil des Shops werden sollen. Aus einer contentPage sollte man idealerweise die Möglichkeit haben, schon direkt Produkte in den Warenkorb legen zu können.

In unserem Beispiel haben wir Dateien mit der Endung .php erzeugt. Sollten Sie in der Lage sein, HTML-Dateien zu parsen, können wir Ihnen nur empfehlen, HTML-Dateien zu erstellen, da diese auf jeden Fall besser aufgenommen werden.

Fazit
Wir hoffen, dass wir Ihnen mit dem ersten Teil unseres Artikels interessante Informationen bieten konnten. Weitere Informationen über die theoretischen Aspekte entnehmen Sie bitte den angegeben Quellen. Sollten Sie sich bereits jetzt entschlossen haben, Ihre eigene Seite zu optimieren, dann empfehlen wir Ihnen, sich vorab genau mit den Bedürfnissen Ihrer Kunden auseinander zu setzen, sodass diese Ihre Seite unter den für Ihre Kunden gängigen Suchbegriffen finden. Auch bei Suchmaschinenoptimierung ist es wichtig, nicht zu übertreiben. Man kann nie im Voraus wissen, was eines Tages als Spam gewertet wird. Daher können wir auch nicht garantieren, dass unsere Lösung suchmaschinenkonform ist. Den Quelltext unseres Beispiel finden Sie auf der beiliegenden CD bzw. im Internet.

Links

© 2004 Software & Support Verlag GmbH. Vervielfältigung nur mit Genehmigung des Verlags. Fragen?