Keywords automatisch aus einer Webseite auslesen
Freitag, 28 Mai 2010 1 Kommentar
Aus SEO Sicht scheinen die Keywords im Meta-Tag einer Webseite keinen besonderen Einfluß mehr auf die Suchmaschinenplatzierung zu nehmen. Verzichten muss man aber auch nicht drauf. Jede einzelne Webseite sollte ihre individuellen Schlüsselwörter haben, ein paar wenige genügen. Besonders wenn der Inhalt einer Seite etwas länger geraten ist, ist es auch aufwendiger (wenn nicht, dann zumindest langweiliger), die wichtigsten Begriffe zu extrahieren. Schreiben wir uns also eine Funktion dafür in PHP.
Sehr nützlich ist die fertige PHP-Funktion str_word_count(var,num). Mit unserem Inhalt der Webseite als 1. Parameter (var) und einer 1 als 2. Parameter (num) wird ein Array aus allen Wörter des Webseiteninhalts erzeugt. Damit wir die Wörter gewichten können, zählen wir deren Vorkommen, indem wir das Array durchlaufen und in ein neues Array das Wort und dessen Häufigkeit notieren (bzw. erhöhen).
<?php
function keys_der_seite($inhalt){
$Array_mit_Woertern=str_word_count($inhalt, 1);
$Woerter_u_Haeufgk = array();
foreach($Array_mit_Woertern as $Wort)
{
if(array_key_exists($Wort, $Woerter_u_Haeufgk))
{$Woerter_u_Haeufgk[$Wort]++;}
else
{$Woerter_u_Haeufgk[$Wort]=1;}
}
return $Woerter_u_Haeufgk;
}
?>
Um an den Inhalt der Seite zu kommen, arbeiten wir mit JOIN und der magischen Konstanten _FILE_, die Konstante gibt uns Pfad und Name der Datei, JOIN liest uns die Datei ein. Der Inhalt muss nur noch um die lästigen HTML- und Script-Tags bereinigt werden, mit strip_tags. Anschließend wird der Funktionsaufruf notiert. Mit print_r lassen wir uns das Array anzeigen.
<?php
$inhalt=join('', file(__FILE__));
$inhalt=strip_tags($inhalt);
$erzeugtes_Array=keys_der_seite($inhalt);
print_r($erzeugtes_Array);
?>
Das sieht schon sehr gut aus. Problem sind die Füllwörter, die man in den Keywords nicht brauchen kann, und eine Sortierung nach gefundener Häufigkeit wäre auch von Vorteil.
<?php
// Rückwärts sortieren, Häufigste voran
arsort($erzeugtes_Array);
print_r($erzeugtes_Array);
?>
Um die Füllwörter zu umgehen könnte man ein Array mit Füllwörter schreiben und in einer Schleife jedes Wort des Inhalts auf Vorhandensein im Array hin überprüfen. Aber das ist Arbeit. Wir könnten auch 2 kleine Tricks anwenden, zugegeben, es werden damit Schlüsselwörter abhanden kommen, wer das nicht möchte, muss auf die Füllwörter-Detektion ausweichen. Zum Einem prüfen wir auf Groß- und Kleinschreibung und lassen alles was kleingeschrieben ist bei Seite fallen. Zum Anderen ignorieren wir alle Wörter, die weniger als 4 Zeichen haben.
<?php
function keys_der_seite($inhalt){
$Fuellwoerter_Array=array('umgehen','nicht','weitere');
$Array_mit_Woertern=str_word_count($inhalt, 1);
$Woerter_u_Haeufgk = array();
foreach($Array_mit_Woertern as $Wort)
{
if(strlen($Wort)>=4 && !in_array($Wort, $Fuellwoerter_Array) && $Wort{0} == strtoupper($Wort{0}) ){
if(array_key_exists($Wort, $Woerter_u_Haeufgk))
{$Woerter_u_Haeufgk[$Wort]++;}
else
{$Woerter_u_Haeufgk[$Wort]=1;}
}
}
return $Woerter_u_Haeufgk;
}
?>
Gut, wir haben nur noch Großgeschriebene Wörter, Wörter mit 4 oder mehr Zeichen und Wörter, die nicht im Array Füllwörter notiert sind. Wir haben das Ergebnis nach Häufigkeit sortiert. Letzter Schönheitsfleck: unser Ergebnis enthält noch Keywords, die nur einmal im Inhalt gefunden wurden. Durchlaufen wir also noch einmal das Array und entfernen alle Elemente mit Häufigkeit gleich 1. In dieser Funktion vertauschen wir auch gleich den Schlüssel und den Wert des Array. Da wir bereits sortiert haben, stimmt die Reihenfolge, die Häufigkeit hat ihre Schuldigkeit getan. Wir brauchen nur noch die eigentlichen Wörter.
<?php
function array_elemente_entfernen($array){
if(is_array($array)){
foreach($array as $Key => $Wert){
if($Wert >= 1){$neues_array[]=$Key;}
}
}
return $neues_array;
}
?>
Fast geschafft. Wir implodieren zum Schluß. Mit implode() machen wir einen String aus den Array-Elementen, jeweils mit einem Komma als Trennzeichen. So haben wir schon das richtige Format für unseren Metatag. Fassen wir erst noch mal alles hergestellte in eine brauchbare Funktion zusammen.
<?php
$inhalt=join('', file(__FILE__));
$inhalt=strip_tags($inhalt);
echo keys_der_seite($inhalt);
function keys_der_seite($inhalt){
$Fuellwoerter_Array=array('umgehen','nicht','weitere');
$Array_mit_Woertern=str_word_count($inhalt, 1);
$Woerter_u_Haeufgk = array();
foreach($Array_mit_Woertern as $Wort)
{
if(strlen($Wort) >=4 && !in_array($Wort, $Fuellwoerter_Array) && $Wort{0} == strtoupper($Wort{0}) ){
if(array_key_exists($Wort, $Woerter_u_Haeufgk))
{$Woerter_u_Haeufgk[$Wort]++;}
else
{$Woerter_u_Haeufgk[$Wort]=1;}
}
}
arsort($Woerter_u_Haeufgk);
$neues_array=array_elemente_entfernen($Woerter_u_Haeufgk);
$unseres_keywords=implode(", ", $neues_array);
return $unseres_keywords;
}
function array_elemente_entfernen($array){
if(is_array($array)){foreach($array as $Key => $Wert){if($Wert >= 1){$neues_array[]=$Key;}}}
return $neues_array;}
?>
Ein ähnliches Ziel verfolgt auch das vionlink Minitool vionlink bodycloud, ein Cloud-Script für Wörter aus dem Body-Tag der Seite. Hier wird der Inhalt der Seite allerdings dazu genutzt, eine Tagwolke zu erstellen, die gefundene Häufigkeit der Wörter wird in unterschiedlicher Größe der Wörter widergespiegelt.
Für die Zeitgenossen, die es etwas eiliger haben
hier der Download: seite_lesen_keywords_finden.zip. (zip, 1KB)
This is a nested column
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
This is another nested column
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Das Script erzeugt einen Fehler in Zeile 28 Warning: implode() [function.implode]: Invalid arguments passed in /var/customers/webs/egal/test/seite_lesen_keywords_finden.php on line 28 vielen dank für die Fehlermeldung. Ich habe den Fehler im Code (in der Downloaddatei) und auf der Webseite korrgiert!