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)) ? '...' : '');
}

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?

*
*

Let's get social

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 en doe ook geen pogingen om SEO filosofisch te verklaren. Het doel van dit weblog is om jou van praktische 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

Volgens mij is het een hele duidelijke tutorial alleen gek...
31.08.2010 door jasonz op Leer een website bouwen met PHP in 5 minuten

@chet Nice!
28.08.2010 door Ramon Eijkemans op custom RSS feeds van NU.nl en SEO

Ditzelfde grapje geldt ook voor video inhoud...
28.08.2010 door chet op custom RSS feeds van NU.nl en SEO

Hoi Kris, ik zou eerlijk gezegd niet weten waarom, maar...
28.08.2010 door Ramon Eijkemans op Gratis SEO scripts? Check MONLOG

Hallo, leuk initiatief.Ik had een vraagje mbt SEO en javas...
27.08.2010 door Kris | Spaarlampen op Gratis SEO scripts? Check MONLOG

Check ;)
27.08.2010 door Ramon Eijkemans op Gratis SEO scripts? Check MONLOG

Ja die ken ik wel :) Het schijnt nog niet mogelijk te zijn...
27.08.2010 door Bjorn van der Neut op Gratis SEO scripts? Check MONLOG

Leuk om te lezen hoe je het gehad hebt, en dan maandag écht...
26.08.2010 door renske op Op SEO avontuur in Moskou

Functioneel was het zeker :)
26.08.2010 door Ramon Eijkemans op Op SEO avontuur in Moskou

Mooi verhaal Ramon, klinkt als een functioneel bedrijfsuitje...
26.08.2010 door Roderick op Op SEO avontuur in Moskou