WordPress Twenty Ten Theme – Google: strukturierte Daten fehlen

Ich benutze für meine Homepage das WordPress Twenty Ten Theme, da es für meine Belange am besten passt.

Nach der letzten Aktualisierung auf die „Twenty Ten“-Version 1.8 habe ich festgestellt, dass in den Google Webmaster-Tools Fehler bei den strukturierten Daten angezeigt werden:

Webmaster-Tools_Fehler

Eventuell wurden diese Fehler auch schon früher angezeigt – aufgefallen sind sie mir allerdings erst jetzt…

Um das Problem zu beseitigen, habe ich dann im Netz recherchiert und auch Hinweise gefunden. Leider waren (bzw. sind) diese Infos und Workarounds nicht wirklich für das Twenty Ten Theme anwendbar oder komplett. Vielleicht ist Twenty Ten doch schon zu alt?
Also habe ich mich dann selbst in die Tiefen des Quellcodes begeben und die nachfolgende Lösung gefunden.

Hinweis: Ich benutze ein Child-Theme. Die originalen Theme-Dateien werden daher niemals modifiziert! Alle Änderungen und Erweiterungen werden im Child-Theme vorgenommen.

1.) Ergänzung der Funktion twentyten_posted_on():

Ich habe dazu den Code in die functions.php meines Child Themes kopiert und den Eintrag class="entry-date" in class="entry-date updated" geändert. So sieht die Funktion jetzt aus (siehe Zeile 4):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function twentyten_posted_on() {
  printf( __( '<span class="%1$s">Posted on</span> %2$s <span class="meta-sep">by</span> %3$s', 'twentyten' ),
    'meta-prep meta-prep-author',
    sprintf( '<a href="%1$s" title="%2$s" rel="bookmark"><span class="entry-date updated">%3$s</span></a>',      get_permalink(),
      esc_attr( get_the_time() ),
      get_the_date()
    ),
    sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s" title="%2$s">%3$s</a></span>',
      get_author_posts_url( get_the_author_meta( 'ID' ) ),
      esc_attr( sprintf( __( 'View all posts by %s', 'twentyten' ), get_the_author() ) ),
      get_the_author()
    )
  );
}

Diese Änderung bewirkt, dass Google das Datum nun anhand der Klasse updated erkennt und korrekt extrahieren kann. Der Code für den author ist ja bereits in der Funktion enthalten und muss nicht extra ergänzt werden.

Diese erste Änderung löst das Problem aber nur auf dynamischen WordPress-Seiten bzw. auf Seiten mit Beiträgen (Posts).
Verwendet man auch statische WordPress-Seiten, muss man noch mehr tun.

2.) Ergänzung der Datei loop-page.php:

Die Datei loop-page.php generiert bei Twenty Ten eine Seite und wird bei allen statischen Seiten benutzt – zumindest auf meiner Homepage.

Man könnte jetzt den kompletten Code für class="entry-date updated" ... und class="author vcard" ... an der richtigen Stelle platzieren. Einfacher ist es aber, die Funktion twentyten_posted_on() aufzurufen – diese generiert den notwendigen Code ja sowieso komplett.

Da ich den Output der Funktion in meinen statischen Seiten nicht sehen will, verstecke ich diesen mit einem hidden-Tag und zusätzlich einer CSS-Klasse text-hidden. Diese ist im Stylesheet style.css definiert und sieht so aus:

1
2
3
.text-hidden {
  display: none;
}

Hier nun die komplette Datei loop-page.php (Ergänzung siehe Zeile 33):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
/**
 * The loop that displays a page
 *
 * The loop displays the posts and the post content. See
 * http://codex.wordpress.org/The_Loop to understand it and
 * http://codex.wordpress.org/Template_Tags to understand
 * the tags used in it.
 *
 * This can be overridden in child themes with loop-page.php.
 *
 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.2
 */
?>
 
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
 
  <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <?php if ( is_front_page() ) { ?>
      <h2 class="entry-title"><?php the_title(); ?></h2>
    <?php } else { ?>
      <h1 class="entry-title"><?php the_title(); ?></h1>
    <?php } ?>
 
    <div class="entry-content">
      <?php the_content(); ?>
      <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
      <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
    </div><!-- .entry-content -->
 
    <p hidden class="text-hidden"><?php twentyten_posted_on(); ?></p><!-- Only for "Google Structured Data". Don't display this --> 
  </div><!-- #post-## -->
 
  <?php comments_template( '', true ); ?>
 
<?php endwhile; // end of the loop. ?>

Das war’s.

Weitergehende Infos findet man hier: Google Webmaster

Dieser Beitrag wurde unter Software, WordPress abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Ein Kommentar zu WordPress Twenty Ten Theme – Google: strukturierte Daten fehlen

  1. Horst sagt:

    Hi Matthias, vielen Dank für deine Ausführungen.
    Es ist tatsächlich nicht einfach, Infos zum Thema „Google: strukturierte Daten fehlen“ + „WordPress Twenty Ten Theme“ zu finden.
    Ich habe deine Hinweise soweit befolgt und umgesetzt. Leider zeigt sich keinerlei Verbesserung; z.B. bei der Seite hier: http://www.amerika-usa-reisen.de/usa-blog/las-vegas/fremont-street/
    Wenn ich die durch den Google-Validador jage, bekomme ich weiterhin eine Warnung zum n [n]:-Knoten: „Der Knoten ist leer. Stellen Sie sicher, dass dies korrekt ist, und entfernen Sie ihn gegebenenfalls.“
    Any idea? Was mache ich falsch?
    Vielen Dank schonmal im voraus für deine Mühe!
    Gruß
    Horst

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.