Automatisch meta-descriptions invullen

2009 10 17 door monchito

Dit is even een klein handigheidje. Vooral handig als je snel heel veel artikelen van een nieuwssectie, productfeed of weblog wil voorzien van een metadescription, waar dat eerder nog niet gedaan was.

Wat je doet is automatisch de eerste regel van je tekst invullen in het metadescription veld.

Dit is overigens een bewezen goede manier om meer verkeer uit Google te halen.

Waarom? Omdat zo voorkomt dat Google lelijke snippets toont als 'uw browser ondersteunt geen frames/javascript', de inhoud van je navigatiemenu of andere lelijke foute teksten.

Met andere woorden: een automatische meta-description is beter dan geen meta-description!

Hoe pak je dat aan?

Simpel eigenlijk: je pakt de inhoud van het artikel, kapt dat af op de eerste punt die je tegenkomt en zorgt ervoor dat lelijke codes (htmlentities en zo) geen herrie schoppen.

De code is als volgt:

/*
 * get frst sentence of text
 */
function first_sentence($content) {
    $content = html_entity_decode(strip_tags($content));
    $pos = strpos($content, '.');
    if($pos === false) {
        return $content;
    }
    else {
        return substr($content, 0, $pos+1);
    }
}

Uitleg

Met de functies strpos() en substr() haal je de content uit de string $content ($content zou dan de tekst van je blogpost zijn) tot aan het eerste punt:

function first_sentence($content) {

    $pos = strpos($content, '.');
    return substr($content, 0, $pos+1);
}

Nu ben je eigenlijk al bijna klaar. Door de volgende code te gebruiken toon je al de eerste zin:

echo first_sentence($content);

Maar je wil natuurlijk voorkomen dat er lelijke codes tussen zitten en dat er toch een korte tekst getoond wordt als er onverhoopt geen punt aan het einde van een zin zit. Daar gebruik je strpos() voor:

$pos = strpos($content, '.');
       
if($pos === false) {
    return $content;
}
else {
    return substr($content, 0, $pos+1);
}

Tenslotte filter je htmlentities en dergelijke eruit:

html_entity_decode(strip_tags($content));

Plaats dit in je HTML template:

  <meta name="description" content="<?= first_sentence($content);" />

En klaar is klara.

Suggesties in de comments zijn uiteraard welkom :)

Update: tekst afkorten

met word_wrap() achtige functies kun je eventueel de hoeveelheid karakters inkorten tot 150, bijvoorbeeld met de volgende code (gevonden op php.net, zelf nog niet getest):

// Substring without losing word meaning and
// tiny words (length 3 by default) are included on the result.
// "..." is added if result do not reach original string length

function _substr($str, $length, $minword = 3){
    $sub = '';
    $len = 0;
    foreach (explode(' ', $str) as $word){
        $part = (($sub != '') ? ' ' : '') . $word;
        $sub .= $part;
        $len += strlen($part);
        
        if (strlen($word) > $minword && strlen($sub) >= $length){
            break;
        }
    }
    return $sub . (($len  strlen($str)) ? '...' : '');
}

Interessant?

Lees dan ook eens meer artikelen over ...

Reacties

Webshoptimizer - Mathieu

door Webshoptimizer - Mathieu, 2009 10 18   Webshoptimizer - Mathieu

Ah, fijn artikel. Geeft me goed inzicht in handige scripts. Het enige wat ik nog mis is afkorting op 160 karakters ;-)

monchito

door monchito, 2009 10 18

hey Mathieu, ja daar zat ik ook nog aan te denken en is een logische volgende stap. Wellicht dat ik het artikel nog update, maar dat is een eitje voor iedere php-programmeur.in elk geval: daar kun je de functie substr() voor gebruiken: http://php.net/manual/en/function.substr.php

monchito

door monchito, 2009 10 18

of word_wrap(): http://www.php.net/manual/en/function.wordwrap.php

Bartjan

door Bartjan, 2009 10 19   Bartjan

"Dit is even een klein handigheidje."Dat is de meta description die je zou krijgen bij deze post met dit script. Naar mijn mening niet de meest goede meta description.Een op maat geschreven meta description is dan ook altijd beter. Maar zo een oplossing is natuurlijk beter dan geen meta description.

monchito

door monchito, 2009 10 19

@Bartjan, juist :)

monchito

door monchito, 2009 10 19

Daar kan ik overigens aan toevoegen dat content managers en journalisten die veelal geschoold zijn in 'schrijven voor het web' of professionele copywriting, hun stukken doorgaans beginnen met een ankeiler waarin de 5W's genoemd worden: wie, wat waar wanneer waarom en hoe. Als je dat dus consequent altijd gedaan hebt, dan heb je prima meta-descriptions! (ervan uitgaande dat je doelgroep net als zo'n 80% van de mensen zoekt met informationele queries).

Rants/opmerkingen/suggesties?

*
*

Wat is MONLOG

Sinds 2002 is MONLOG het weblog van Ramon Eijkemans, freelance SEO-gun for hire.

Dit weblog bevat how-to's, mijmeringen, soms wat humor. Het gaat vrijwel altijd over SEO. Ik herhaal geen nieuws. Het doel van dit weblog is om jou van praktische en doordachte informatie te voorzien!

En dan nog dit: guestpostings zijn welkom! Mail me als je je ei kwijt wil op dit goed rankende podium.

Laatste comments

@Aartjan: ik heb hetzelfde met 'lekker kontje' :)...
25.11.2011 door Ramon Eijkemans op Ranken op Banaan

Bij mij is 'banaan' toevallig al jaren het zoekwoord waar ik...
23.11.2011 door Aartjan van Erkel op Ranken op Banaan

Gewoon maken waar vraag naar is. Dat is zo oud als de weg...
22.11.2011 door Thomas op Ranken op Banaan

Een banaan natuurlijk :)
09.11.2011 door Ramon Eijkemans op Ranken op Banaan

In welk tineu zien we jou terug binnenkort?
09.11.2011 door Emiel op Ranken op Banaan

@Simme @Navin proost! :)
07.09.2011 door Ramon Eijkemans op Vakantie!

Zo maak je mij wel erg jaloers :)
05.09.2011 door Navin Poeran op Vakantie!

12 bier geeft plezier.en veel succes gewenst tijdens de tw...
31.08.2011 door simme op Vakantie!

@Willem: ik denk op de manier zoals ik in dit artikel...
20.08.2011 door Ramon Eijkemans op Faceted search & SEO: vloek of zegen?

Goed en interessant artikel. Wat mij vooral bezighoudt, is...
20.08.2011 door Willem Hoekstra op Faceted search & SEO: vloek of zegen?