WordPress & Webwork

WordPress: dynamische meta-Description

In diesem Artikel wird beschreiben wie man dynamische Seitenbeschreibungen (meta-Description) in WordPress realisiert.

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:

Meta-Description im Suchergebnis

Meta-Description als Beschreibungstext

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 &amp; 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.

15 Reaktion(en)

    1. Perun

      Hallo Reinhold,

      Und wo fügt man dieses Codeschnippsel dann in welche Datei ein?

      dort wo sich dein Dokumentkopf (<head></head>) befindet. Üblicherweise wäre dies die header.php. Also innerhalb von <head></head>.

  1. Christian Schorn

    Es kann sogar noch etwas weniger Code sein: Da is_single() in der Bedingung verwendet wird, ist die while-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; ?>" />

  2. Christian Schorn

    Ups, Kommando zurück! Die while-Schleife ist notwendig! (Bzw. ein zweiter Aufruf von have_posts() direkt nach the_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 und have_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 und loop_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. 😆

  3. Crazy Girl

    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.

  4. Pingback: Eine dynamische Beschreibung im head-Bereich » Guru 2.0 › 3.0

  5. Patrick

    Hallo

    Für die Beschreibung benutze ich Benutzerdefinierte Felder. Kann man auch ein solches Feld auslesen und als Beschreibung nutzen?

    Bese Grüsse
    Patrick

  6. Pingback: Blogprojekt-Podcast #21 – Ab wann … > Podcast, Schreiben > Podcast, Blog, Blogger, WordPress, Inhalte, ab wann

Die Kommentare in diesem Beitrag sind geschlossen.

WordPress-Schulungs­unter­lagen

Anleitung für Autoren und Redakteure
Schneller und unkomplizierter Einstieg in die redaktionelle Betreuung einer WordPress-Installation.

Handbuch für Administratoren
Schneller und unkomplizierter Einstieg in die technische Betreuung einer WordPress-Installation.

Anschauen