Das meta
-Element ist ein leeres Element und entfaltet seine “Wirkung” erst in Verbindung mit zwei Attributen: name
* und content
. Mit dem Wert des Attributs name
bestimmt man die “Funktion” des Elements und mit content
wird der dazugehörige Inhalt ausgeliefert. Hier ein Beispiel für die Seitenbeschreibung:
<meta name="description" content="Ein tolles Weblog" />
Die Seitenbeschreibung, also die meta
-Description nutzen die Suchmaschinen gerne als Beschreibungstext für das jeweilige Suchergebnis. Hier ein Beispiel:
Damit gehört meta
-Description zu den wichtigen meta
-Angaben für eine Website. Und wie kann man das ganze in WordPress realisieren? Klar, es gibt diverse Plugins mit denen man dies realisieren kann, aber ich denke dennoch dass man sich hierbei auch die Code-Lösungen anschauen sollte.
Da wir uns im Dokumentkopf (<head>
) außerhalb des WordPress-Loops befinden, können wir auf so Funktionen wie the_excerpt()
oder auf die benutzerdefinierte Felder nicht direkt zurückgreifen. Ich weiß, in englischsprachigen Blogs existieren einige Anleitungen die etwas anderes behaupten, aber das stimmt nicht.
Nach ein bisschen Suche habe ich zwei Beispiele gefunden, die auch wirklich funktionieren. Das erste Beispiel ist in meinen Augen etwas zu viel Code. Das zweite Beispiel kommt mit deutlich weniger Code zu Recht:
<meta name="description" content="<?php if (have_posts()&& is_single()):while(have_posts()):the_post(); the_excerpt_rss(20,2); endwhile; else: ?>Die Standardbeschreibung<?php endif; ?>" />
Und was macht der Code? Zuerst wird im <head>
ein zusätzlicher Loop erstellt. Dadurch hat man auch Zugriff auf Funktionen die nur innerhalb des Loops ihre Funktion entfalten können. Dann wird der Auszug (excerpt) ausgelesen, welcher für den RSS-Feed vorbereitet wurde. Der Auszug wird nach 20 Wörtern abgeschnitten und die 2
besagt, dass alle html-Tags entfernt und das kaufmännische und (&) in &
umgewandelt wird.
Hier hat man als Autor dann die Möglichkeit selber die meta
-Description zu steuern. Entweder es werden automatisch die 20 ersten Wörter des jeweiligen Artikels eingebunden oder du hast die Möglichkeit einen individuellen Auszug – im Admin-Bereich, direkt unter dem Textfeld für den Artikel – zu verfassen. Der individuelle Auszug hat in dem Fall den Vorrang und wird, so fern er vorhanden ist, auch eingebunden.
* = manchmal kommt statt name
auch http-equiv
zum Einsatz. Das habe ich jetzt aber absichtlich weggelassen um die Einleitung nicht unnötig zu lang zu machen.
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
@Perun
Du hast übrigens in Deinem Header zweimal die gleiche “meta description” 😉
@Ivan,
ja, die beiden Codes sind noch Testweise drin 😉
so so 🙂
Und wo fügt man dieses Codeschnippsel dann in welche Datei ein?
Hallo Reinhold,
dort wo sich dein Dokumentkopf (
<head></head>
) befindet. Üblicherweise wäre dies die header.php. Also innerhalb von<head></head>
.Es kann sogar noch etwas weniger Code sein: Da
is_single()
in der Bedingung verwendet wird, ist diewhile
-Schleife unnötig:<meta name="description" content="<?php if (have_posts()&& is_single()):the_post(); the_excerpt_rss(20,2); else: ?>Die Standardbeschreibung<?php endif; ?>" />
Ups, Kommando zurück! Die
while
-Schleife ist notwendig! (Bzw. ein zweiter Aufruf vonhave_posts()
direkt nachthe_excerpt_rss(20,2);
täte es auch.)Denn es passiert folgendes:
the_post()
holt nicht nur die Daten des aktuellen Posts, sondern startet auch die Loop undhave_posts()
prüft nicht nur auf das Vorhandensein noch unbearbeiteter Posts sondern beendet auch die Loop und setzt sie wieder auf Anfang zurück.Daher muss
have_posts()
noch einmal aufgerufen werden (in diesem Fall beim zweiten Schleifendurchgang) wenn keine Posts mehr vorhanden sind, damit der Loop-Durchlauf im Content richtig funktioniert.Ausserdem unter Umständen gefährlich: es werden die Aktionen
loop_start
undloop_end
ausgelöst. Falls Plugins oder ein Theme diese nutzen, um Content auszugeben, hat man diesen im Header.Also erstens meinen vorherigen Kommentar nicht beachten und zweitens mit Loop-Funktionen ausserhalb der Loop vorsichtig sein. 😆
Leisten diese Funktionalität nicht ohnehin schon SEO Plugins wie All-In-One-SEO?
Vielen Dank für den Artikel. Bisher kannte ich nur das Beispiel 1 (viel Code). Das zweite Beispiel ist da schon viel eleganter.
😀
Hallo Perun:
Vielen Dank für das Snippet!
Spricht eigentlich etwas dagegen, anstatt “the_excerpt_rss” auch “the_title_rss” zu nutzen?
Viele Grüße
Stefan
Für die Description arbeite ich in der Regel mit einem benutzerdefinierten Feld und auch nicht mit einem Standardwert, sondern stattdessen der automatischen Generierung (etwas längerer Codeschnipsel). Ich brauche die Excerpt oft für andere Dinge und darin steht dann nicht wirklich das, was ich in der description haben möchte.
Einen Standardwert halte ich auch für etwas “gefährlich”, da doppelte Descriptions in den Webmaster Tools als Fehler ausgegeben werden.
[…] schaut euch WordPress: dynamische meta-Description auf seinem Blog in Ruhe an. Ein kleine Anmerkung habe ich aber dazu. Der vom ihm erwähnt […]
Hallo
Für die Beschreibung benutze ich Benutzerdefinierte Felder. Kann man auch ein solches Feld auslesen und als Beschreibung nutzen?
Bese Grüsse
Patrick
[…] Hacker Angriff auf WordPress.com Blogs WordPress durch deutsche Sprachdatei 44% langsamer Dynamische Meta Description WordPress-Newsletter von Perun.net neue Spam-Kommentare sind gefährlich WordPress Papierkorb […]
Perfekt, vielen Dank!