Unieke meta tag description toevoegen aan WordPress

De meta tag description is belangrijk voor de zoekmachine-optimalisatie (SEO). Het is een korte samenvatting van de pagina. Bij een zoekactie op Google komt de description onder de titel te staan, zodat een zoeker beter ziet waar de pagina over gaat en kan besluiten de website wel of niet te bezoeken.

In WordPress staat standaard geen description in de head-sectie. En dat ziet er dan bij Google dan zo uit als je zoekt op “modevakschool.net”:

Geen description voor modevakschool.net

Geen goede omschrijving van de website dus, maar een willekeurige greep uit wat links op de pagina, waar het zoekwoord in voorkomt.

Voor WordPress is hiervoor een aantal plugins geschreven en, omdat ik niet kon vinden wat op precies zocht, hierbij mijn code. Hierbij ben ik uitgegaan van de stelling Google:

Wherever possible, create descriptions that accurately describe the specific page.

Daarnaast wil ik dat de inhoud van de description automatisch gevuld wordt, maar ook de auteur de mogelijkheid geven deze zelf aan te passen. En het moet vooral eenvoudig zijn. Sodeju, wat een constructies kunnen mensen verzinnen zeg.

Opzet

Elk bericht en elke pagina krijgt een eigen, unieke description, samengesteld uit de excerpt of de eerste zinnen van het bericht. Overzichtpagina’s van tags, categorieën, berichten en de zoekresultaten krijgen elk een eigen description, afhankelijk van de namen of zoekwoorden.

Lengte description: Tussen de 130 en 160 karakters, zonder HTML-tags en afgebroken bij een spatie in de tekst en niet midden in een woord.
Is een description korter dan 130 woorden, dan komt get_bloginfo(‘name’), plus zonodig de get_bloginfo(‘description’) erachteraan.

Voorpagina (home): Het mooiste is om hier een goede omschrijving van de hele website te geven, niet afhankelijk van de vaak wisselende inhoud van voorpagina. Dus de  get_bloginfo(‘description’) met zonodig de get_bloginfo(‘name’) erachteraan.

Bericht: De excerpt of de eerste paar zinnen van het bericht.

Pagina: De eerste paar zinnen van de pagina. Standaard heeft een pagina geen excerpt, er zijn plugins om ook voor pagina’s een excerpt toe te voegen. Als er een excerpt bestaat, wordt deze inhoud genomen. (Eigenlijk raar dat excerpt nog niet standaard in WP bij een pagina zit.)

Author: De display name van de auteur

Categorie: De category name

Tag: De tag name

Search: De zoekquery

Zo kun je voor per template extra code toevoegen.

De lengte wordt hierna gecontroleerd en afgehakt op ongeveer 160 karakters, in hele woorden. Is het resultaat korter dan 160 karakters, dan wordt de description aangevuld met de blognaam en de eventueel ook nog de blogdescription. Bij opsommingen, zoals archive, index, search, tag, category komt het paginanummer erbij.

De code in functions.php

// ----------------------------------------------------------------------------------------
// custom_description
// Code by Rian Rietveld @ RRWD web development http://www.rrwd.nl
// August 2010
function custom_description() {
  global $wpdb, $paged;

  // default descrioption / name
  $blog_description = get_bloginfo('description');
  $blog_name = get_bloginfo('name');
  $description = "$blog_description $blog_name";

  // page number
  unset($more_page);
  if ($paged > 1) $more_pages = ". pagina $paged";

  // standard templates
  if (is_front_page())   {
    echo "<meta name=\"description\" content=\"$description\" />\n";
    return;
  }
  if (is_single() || is_page()) {
    $description = excerpt_custom_description_page_post();
    $description = lenght_custom_description($description, 160, $blog_name, $blog_description);
    echo "<meta name=\"description\" content=\"$description\" />\n";
    return;
  }
  if (is_search()) {
    $description = "Zoekresultaten voor " .$_GET['s']." in $blog_name".$more_pages.". $blog_description";
    echo "<meta name=\"description\" content=\"$description\" />\n";
    return;
  }
  if (is_author())   {
    $description = trim(wp_title( "", 0 ). " schrijft op $blog_name".$more_pages.". $blog_description");
    echo "<meta name=\"description\" content=\"$description\" />\n";
    return;
  }
  if (is_category() || is_tag() || is_archive()) {
    $description = trim(wp_title( "", 0 ). " op $blog_name".$more_pages.". $blog_description");
    echo "<meta name=\"description\" content=\"$description\" />\n";
    return;
  }

  // custom templates
  // $path_template =  get_page_template();
  // if ((strstr($path_template, 'template_name.php')) ) {
  //   $description = "your description code";
  //   echo "<meta name=\"description\" content=\"$description\" />\n";
  //   return;
  // }
}

function lenght_custom_description($string, $maxlength, $extension1, $extension2) {
  $cutmarker = "**cut_here**";
  if (strlen($string) > $maxlength) {
    $string = wordwrap($string, $maxlength, $cutmarker);
    $string_array = explode($cutmarker, $string);
    $string = $string_array[0];
    if ( (strlen($string) + strlen($extension1) ) < $maxlength) $string .= " ".$extension1;
    if ( (strlen($string) + strlen($extension2) ) < $maxlength) $string .= " ".$extension2;
  }
  return $string;
}

function excerpt_custom_description_page_post() {
  global $wp_query;
  unset($description);
  $post_id = $wp_query->post->ID;
  $description =   $wp_query->post->post_excerpt;
  if ($description == '') $description = $wp_query->post->post_content;
  $description = strip_tags($description);
  return $description;
}

add_action('wp_head', 'custom_description');

En na de nieuwe indexering door Google ziet de description er ineen een stuk logischer uitnieuwe description

Discussie

Afhankelijk van de opzet van de website kan er ook een datum en auteur bij de berichten. En vaak zijn de categorieën en tags korte namen. Je kunt hier ook de omschrijving van de tag of categorie in zetten.

Bronnen

Advertisements

Author: Rian Rietveld

WordPress Engineer focussing on accessibility

4 thoughts on “Unieke meta tag description toevoegen aan WordPress”

    1. Hoi Daniel, bedankt voor de link 🙂 ik ga ernaar kijken, ben wel benieuwd hoe in die plugin een en ander is opgelost.

      Eigenlijk heb ik deze code geschreven omdat ik het zelf veel te leuk vind om wat te schrijven en ik wil het zo maken dat de gebruiker/beheerder er geen omkijken naar heeft. Scheelt ook weer in de CMS-training en het plugin-upgraden.

      Like

  1. Zou een handige functie zijn om standaard te gebruiken als hij overruled word door bijv. all in one seo, dus als je handmatig een description schrijft. Kan zo snel even geen juiste filter of actie daar voor vinden.

    Misschien een lage priority geven aan de hook aan wp_head, zodat je 2 meta description tags hebt met de custom made van all in one seo ‘bovenaan’. Netjes is het niet, maar het zal het vast doen. 😉

    Like

    1. Hoi Danny,
      Graag hou ik alles zo simpel mogelijk en twee descriptions lijkt me niet de goede weg. Maar een integratie of combinatie met all-in-one-seo-pack is zeker het onderzoeken waard, daar ga ik eens induiken.

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s