Seit einiger Zeit bin ich auf der Suche nach einer einfachen Möglichkeit für die Meta Tags Description und Keywords für meine Beiträge. Falls ich nicht manuell in dem Beitrag eine Meta Description eintrage, soll sie automatisch aus den ersten Wörtern des Beitrages generiert werden. Die entsprechenden Meta Keywords zum Beitrag wollte ich ebenfalls entweder händisch im Beitrag eingeben, oder, falls ich das nicht mache, sollte kein Meta Tag für die Keywords ausgegeben werden.
Grund für meine diesbezügliche Suche ist, dass mir das All in One SEO Pack Plugin schon geraume Zeit ein Dorn im Auge ist. Verwendet man in den Beiträgen Tags und gibt händisch dem Beitrag keine Meta Keywords, dann werden die Tags automatisch als Keywords zugeordnet. Diese Funktion lässt sich natürlich im Admin Bereich weder ein- noch ausschalten. Äußerst semi-professionell
Da die Tags als Meta Keywords für mich so gar nicht in Frage kommen (haufenweise die gleichen Meta Keywords könnten sich irgendwann negativ auswirken), wäre ich gezwungen gewesen, jedem Beitrag manuell Keywords zuzuweisen und das wollte ich auch auf gar keinen Fall, vor allem nicht rückwirkend für alle meine Beiträge. So blieb mir erst einmal nichts anderes übrig, als manuell im Plugin die Meta Keywords Generierung zu unterdrücken, denn für die automatische Meta Description Generierung brauchte ich das Plugin ja erst einmal noch.
Ich habe lange gesucht und irgendwie konnte keines der Plugins meine Wünsche richtig befriedigen. Für den Title Tag habe ich mich für das SEO Title Tag Plugin entschieden. Einfach, klein und vor allem gute Funktionen, denn damit kann man Seiten, Beiträgen, Kategorien, Tags und URLs ihre eigenen Title Tags hinzufügen und das sogar noch in einer komfortablen Masseneditierung.
Für die Meta Description und die Meta Keywords sah es aber schon schwieriger aus mit Plugins. Und wieso eigentlich für solch eigentlich kleine Funktionalitäten irgendwelche großen Plugins installieren, deren meisten Funktionen ich sowieso nicht brauche. Also machte ich mich auf die Suche nach kleinen aber feinen manuellen Lösungen. Mit etwas Zeit, rumprobieren (ich bin ja wirklich alles andere als ein PHP Profi) und der Hilfe einiger Anleitungen im Netz bin ich schließlich zu meinem Ziel gelangt.
Die Meta Descriptions werden nun automatisch aus dem Beitragsauszug generiert (genau wie bei fast allen SEO Plugins). Entweder gebe ich im Beitrag einen Auszug ein, oder es wird jeweils der erste Text aus dem Beitrag verwendet. Warum ein Plugin verwenden, wenn die entsprechenden Felder in Wordpress eh schon da sind, und eigentlich nur ausgelesen und etwas angepasst werden müssen. Mit Hilfe des Wordpress Forums habe ich dazu folgenden Code-Schnipsel in meine header.php gepackt (Achtung, alleine funktioniert dieser Code nicht, da gehört noch 2. Teil, der Keywords Code, dahinter):
<?php if ( is_single() ) { ?>
<?php global $wp_query;
$zg_post_ID = $wp_query->post->ID; // Read post-ID
$zg_post_query = new WP_Query('p=' . $zg_post_ID . ''); // Define new loop with post ID
while ($zg_post_query->have_posts()) : $zg_post_query->the_post();
if ($zg_post_ID== get_the_ID()) { // Make sure that we just show what we want to show (to prevent crazy output that might occure)
$desc = strip_tags(get_the_excerpt()); ?>
<meta name="description" content="<?php echo substr($desc,0,strpos($desc,".",160)+1); ?>" />
<?php } endwhile;
Kleines zusätzliches PHP Schmankerl von mir, dessen Grundidee ich bei phpBuddy.eu gefunden hatte: Die Meta Description ist unterschiedlich lang. Mindestzeichen sind 160. Danach sucht sie sich den nächsten Punkt (Satzende) und geht genau bis dorthin. So wird die Meta Description nicht einfach mitten im Satz abgeschnitten, sondern endet beim nächsten Punkt nach 160 Zeichen.
Eine ähnliche Lösung verwende ich für die Meta Keywords. Auch hier galt für mich als erstes, vorhandene Wordpress Felder zu nutzen und entsprechend auszulesen. Für die Meta Keywords eigenen sich die benutzerdefinierten Felder am besten. Wird ein entsprechendes Feld im Beitrag eingegeben, wird es ausgelesen. Gibt es dieses Feld aber nicht im Beitrag, gibt es auch keine Meta Keywords. Eigentlich ganz einfach, oder?
Bei der Umsetzung hat mir der Beitrag von Frank Bültge geholfen. Ähnlich seiner Anweisungen in diesem Beitrag habe ich eine Funktion für die functions.php für das Benutzerdefinierte Feld keywords erstellt und rufe diese in meiner header.php auf.
In meiner functions.php habe ich folgende Code hinzugefügt:
function tp_keywords() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
if ( $key == 'keywords' ) {
return $value;
}
}
}
}
Und den obigen Code-Schnipsel der Meta Description aus der header.php habe ich um folgende Zeilen ergänzt:
$keywords = tp_keywords();
if ($keywords !='') { ?>
<meta name="keywords" content="<?php echo $keywords; ?>" />
<?php } } ?>
Nun kann ich, wenn ich mag, das Benutzerdefinierte Feld keywords in meinen Beiträgen nutzen.
Damit ist das All in One SEO Pack Plugin in meinem Blog Geschichte. SEO Plugins nutze ich nun nur noch Robots Meta und den SEO Title Tag. Was anderes brauche ich für eine ordentliche Suchmaschinenoptimierung nicht
Hmmm…! Interessantes Thema
Ich nutze All in one Seo und habe damit meistens natürlich auch die Tags als Keywords… Eigene Keywords trage ich sehr, sehr elten ein.
Vielleicht muss ich das die Tage mal überdenken…
Crazy … coole Sache, dass sich mal jemand dieses Themas annimmt. Ich nutze bisher auch das Platinum SEO-Pack und habe es mir nach und nach abgewöhnt die Metas per Hand einzutragen … das führt bei mir aber auch dazu, dass sich das Plugin die Tags schnappt.
Was meine Philosopie der Metakeywords angeht ist das auch alles andere als toll. Vielleicht werde ich mir mal Deinen Lösungsweg vornehmen – sobald ich dazu ein wneig Ruhe finde.
Alle Plugins die ich mir angesehen habe, fügen die Tags als Keywords ein, wenn nichts angegeben wird. Und die meisten von uns haben sich mit der Zeit abgewöhnt was anzugeben
Für mich sind die Tags als Keywords ein definitives “no go”, die Gefahr von Abwertungen seitens der Suchmaschinen ist mir persönlich einfach zu hoch.
Hallo Tanja,
könntest Du mir bitte den Code vielleicht zusammenhängend per Mail schicken?! Irgendwie verstehe ich nicht welcher Code mit welchem zusammengehört und wo er hinkommt, also in der header.php nach und vor oder egal?
Ich danke Dir
@Camdy: Der erste und letzte gehört in die header.php, irgendwo vor dem
</head>Tag. Der mittlere gehört in die functions.php, unten einfach dazu.Ich kann dir leider keine eMail mit einem zusammenhängenden Code in drei Teilen schicken, der in zwei verschiedene Dateien kommt
Okay, ich danke Dir! Aber zur functions.php habe ich da noch eine Frage: Der mittlere Code wird aber zwischen eingesetzt oder wie Du geschrieben hast unten drunter?
P.S. Du musst mich ja komplett für bedeppert halten, aber ich habe überhaupt kein Sinn für php, etc. Und das mal nett formuliert.
Irgendwie wurde das der Code nicht übertragen. Ich meine am Ende der functions.php steht ?>. Dann noch davor oder eben hinten dran?
Okidoki, also fangen wir mal ein bißchen von vorne an
PHP wird gestartet mit
<?phpund beendet mit?>. Im Fall der functions.php heißt das, dass das natürlich vor diese Ende dort reingehört. Wenn Du es dahinter schreibst wird es nicht funktionieren.So, prima, Tanja, habe jetzt den Code eingefügt und mir das gleich mal im Quelltext anzeigen lassen. Vielen lieben Dank für Deine Hilfe!!!
@Camdy: So schwer war das doch gar nicht, oder? Man muss sich nur trauen und ev. auch mal ein paar Fragen stellen. Am Anfang hatte ich auch immer Bammel da rumzuspielen und mittlerweile habe ich gar keine Skrupel mehr. Mehr passieren, als dass gerade mal kurz gar nichts mehr geht und ich das gerade geänderte wieder rückgängig machen muss, kann ja nicht. Ich freu mich auf jeden Fall, dass es geklappt hat
Hallo Tanja,
das ist mein erstes Posting bei Dir, aber bestimmt nicht mein letztes (okay, ich bin jetzt zuerst mal für 3 Wochen in Irland – aber dann).
Mit diesem Artikel hast Du mir auf jeden Fall schon mal sehr geholfen.
Die “description” hatte ich nämlich noch auf meiner Todo-Liste.
Also, vielen Dank für den Artikel und bis bald
Klaus
@Klaus: Na denn… Herzlich Willkommen und einen schönen Urlaub (falls es Urlaub ist)
Du würdest mir einen größeren Gefallen tun, wenn Du Deinen Feed auf Volltext umstellst, so dass ich ihn auch abonnieren kann.
Und es freut mich natürlich, wenn ich Dir helfen konnte
Hallo Tanja,
danke für den Tipp – und schon erledigt.
Ich habe in Zukunft wohl noch viel zu lernen.
Website schreiben ist eine Sache, WordPress ist wieder eine andere,
Gruß
Klaus
Ahh… schön
Würde ich jetzt nicht unbedingt so stehen lassen sondern eher sagen “Bloggen und die Tricks von Wordpress zu kennen ist eine andere”
Hallo,
kann es sein, dass “tp_keywords” nicht mit Seiten funktioniert.
Ich habe alles eingebaut und in Beiträgen im Blog funktioniert es. Aber bei Seiten erhalte ich keine Meta-Tags.
Danke für eine kleine Hilfe.
Thomas
@Thomas: Durch die erste Zeile des Codes “if ( is_single() )” geht hervor, dass das Ganze nur auf den einzelnen Beiträgen funktioniert. Wenn Du es für die Seiten ebenfalls haben möchtest, dann musst Du den Conditional Tag entsprechend abändern auf “if ( is_single() || is_page() )”.
Danke für die Antwort, aber Deinen Hinweis mit der Abfrage, ob eine Seite geladen ist, habe ich probiert. Genauso habe ich den Teil mit den Keywords auch mal aus der if-Abfrage rausgenommen. Beides leider ohne Erfolg.
Zum Testen hab ich dann auch mal in
if ($keywords !=”) {
ein else eingebaut, um festzustellen, ob $keywords gefüllt ist. Das Ergebis: Es wird das ausgeführt, was in der else -Schleife steht. Also ist $keywords leer und meine Vermutung ist, dass das Problem in dem Code für die functions.php liegt.
Mal schauen, ob wir dahinter kommen, wo das Problem ist.
@Thomas: Ich habe ehrlich keine Ahnung wo da der Hund begraben sein sollte. Da ich die keywords als Funktion aber sowieso nicht mehr nutze, da sie außer Schönheitskosmetik keinen Wert haben, werde ich da auch keine Zeit mehr hinein investieren.