Gepost op 13-04-2012 in de categorie SEO door Rolf Broer

Een goede zoekmachine probeert niet de pagina’s terug te geven die het meest overeenkomen met de ingevoerde zoekopdracht, maar probeert een antwoord te geven op de achterliggende vraag. Als je je hiervan bewust bent, snap je ook waarom Google (en andere zoekmachines) een ingewikkeld algoritme gebruiken om te bepalen welke resultaten ze weergeven. De factoren in het algoritme bestaan uit “vaste factoren” zoals het aantal backlinks die een pagina heeft en het aantal social recommandaties door middel van likes en +1’s.  Dit zijn over het algemeen externe invloeden. Naast deze externe invloeden zijn er ook factoren op de pagina zelf die van invloed zijn op de weergave van de zoekresultaten. Denk bijvoorbeeld aan de opbouw van de pagina en de verschillende elementen op de pagina die een rol spelen binnen het algoritme. Echter, met enkel het analyseren van de on-site en off-site factoren kan Google slecht bepalen welke pagina een antwoord gaat geven op de vraag achter de zoekopdracht. Om dit in kaart te kunnen analyseren, zal moeten worden gekeken naar de teksten op de pagina.

In dit artikel ga ik verder in op enkele problemen waar een zoekmachine mee te maken krijgt bij het toekennen van een waarde aan een document en zal ik mogelijke oplossingen behandelen. Aan het einde van dit artikel zal het algoritme van Google en consorten nog niet ontrafeld zijn (helaas), maar zijn we wel een stap verder gekomen in het begrijpen van bepaalde adviezen die we bij SEO vaak geven. Er zullen enkele formules voorbijkomen, maar geen paniek. Het gaat om het verhaal in grote lijnen.

image: 1334098076 9805a46598ad812762f4179ddd996452 Zoekmachinealgoritmes, een kijkje onder de motorkap 
Om het één en ander te illustreren zal ik gebruik maken van kroketten en bitterballen

Wel of geen kroket?
Zoekmachines zijn de laatste jaren enorm geëvolueerd, maar in het begin konden zoekmachines slechts omgaan met booleaanse operatoren. Simpel gezegd, een term kwam voor in een document of niet. Iets was waar of niet waar, 1 of 0. Daarnaast kon je met behulp van de operatoren als AND, OR en NOT zoeken in documenten die meerdere termen bevatten, of termen uitsluiten. Dit klinkt wellicht vrij simpel, maar toch brengt dit al de eerste problemen met zich mee. Stel we hebben twee document die bestaan uit de volgende teksten:

Document 1:
“En ons restaurant in New York  serveert kroketten en bitterballen.”

Document 2:
“In Nederland haal je kroketten en frikadellen uit de muur.”

image: 1334098078 3702d55cd687087c76d012e1d776d36c Zoekmachinealgoritmes, een kijkje onder de motorkap
En frikandellen om een compleet beeld te schetsen

 
Als we een zoekmachine zouden bouwen, zou de eerste stap het opdelen van de tekst in losse termen zijn, ook wel tokaniseren genoemd. We willen immers snel kunnen bepalen welke documenten een bepaalde term bevatten. Dit gaat eenvoudiger als we alle ‘tokens’ in een database zetten. Een token is een afzonderlijke term in een tekst, dus hoeveel termen bevat Document 1 dan?

Op het moment dat je deze vraag voor jezelf gaat beantwoorden, zal je waarschijnlijk even stilstaan bij de definitie van een “term”. In het voorbeeld van document 1 is “New York” namelijk 1 term. Hoe we kunnen bepalen dat de twee losse woorden gezamenlijk één term vormen, kom ik in een ander artikel op terug. Op dit moment zien we ieder los woord voor het gemak maar even als een aparte token. We hebben dus 10 tokens in zowel Document 1 als Document 2. Om te voorkomen dat we informatie dubbel in onze database gaan zetten, gaan we niet de tokens gebruiken, maar de types.

Types zijn de unieke tokens in een tekst. In Document 1 komt bijvoorbeeld twee keer de token “en” voor.  Nu ga ik wel voorbij aan het feit dat “en” in Document 1 eenmaal mét en eenmaal zonder hoofdletter geschreven wordt. Net als bij het bepalen van een term zijn er technieken om te bepalen of iets daadwerkelijk met een hoofdletter geschreven moet worden of niet. In dit geval kunnen we ervan uitgaan dat de zin simpelweg begon met het woord en dat dit de reden is dat er een hoofdletter is gebruikt.

Nu we alle types hebben opgeslagen in de database, kunnen we gaan zoeken met behulp van booleans, oftewel bevat een document de term (true) of niet (false). De zoekopdracht “kroketten” levert als resultaat zowel Document 1 als Document 2 op. De zoekopdracht “kroketten AND bitterballen” geeft enkel Document 1 als resultaat. Het probleem van deze methode is dat je al snel teveel of te weinig resultaten krijgt. Daarnaast mist de mogelijkheid tot het ordenen van de resultaten. Als we dit willen verbeteren, moeten we bekijken welke factoren nog meer kunnen worden meegenomen naast de aanwezigheid/afwezigheid van een term in een document. Welke onpage factoren zou jij meenemen om een ordening te maken?

Zone Indexes
Een relatief simpele methode om ordening aan te brengen is het gebruik van zone indexes. Een webpagina is op te delen in verschillende zones. Denk hierbij aan een title, description, body en auteur.  Door een gewicht toe te kennen aan iedere zone, kan je voor elk document een vrij simpele score berekenen. Dit is dan ook een van de eerste methodes die Google gebruikte om onpage te bepalen waar een pagina over ging. De werking van scores met behulp van Zone indexes werkt als volgt:

Stel, we kennen de volgende waardes toe aan iedere zone:

Zone Weight
title 0.4
description 0.1
content 0.5

We voeren de volgende zoekopdracht uit:
“kroketten AND bitterballen”

En we hebben het volgende document:

Zone Content Boolean Score
title New York Snackbar 0 0
description Snackbar met overheerlijke kroketten en bitterballen 1 0.1
content Ons restaurant in New York  serveert kroketten en bitterballen 1 0.5
    Total 0.6

Doordat er veelvuldig misbruik werd gemaakt van het gewicht dat werd toegekend aan specifieke zones zoals de title en de description, groeide het belang van Google om eveneens de body op te splitsen in losse zones. Het liefst zou Google dan ook zien dat het internet uit enkel gestructureerde documenten bestond. Op dit moment is dat nog een utopie. Het web bevat een grote verscheidenheid aan documenten met verschillende structuren. Het interpreteren van een XML document door een machine is nog vrij eenvoudig. Echter, bij het interpreteren van een HTML document komt veel meer kijken. De structuur en tags zijn een stuk beperkter en dat maakt het analyseren lastiger. Natuurlijk zit HTML5 in de pijplijn en ondersteunt Google microformats, maar ook dit kent nog zijn beperkingen. Als je namelijk bezig bent met SEO en weet dat Google bij een HTML5 pagina meer waarde toekent aan een term binnen de tag en geen waarde aan termen in de tag, zal je nooit de tag gebruiken.

Om de content en context van een pagina te bepalen, zal Google zelf een webpagina moeten opdelen in blokken. Op deze manier kan Google beter inschatten welke blokken op een pagina belangrijk zijn en welke niet. Een methode die hiervoor gebruikt kan worden is de tekst/code ratio. Een blok op een pagina die veel meer tekst bevat dan HTML code, is waarschijnlijk de content op de pagina. Een blok die veel links/HTML code bevat en weinig content is waarschijnlijk het menu. Dit is dan ook de reden waarom de keuze van de juiste What You See Is What You Get (WYSIWYG) editor erg belangrijk is. Sommige van deze editors zorgen namelijk voor veel onnodige HTML code. 

Het gebruik van tekst/code ratio is slechts een van de methodes waarmee een zoekmachine een pagina kan opdelen in blokken. Bill Slawski is aan het begin van vorig jaar al dieper ingegaan op het identificeren van dergelijke blokken.

Het voordeel van de zone indexes methode is dat je vrij simpel een score kan berekenen voor elk document. Een nadeel is natuurlijk dat veel documenten dezelfde score kunnen krijgen.

Term frequency
Toen zojuist werd gevraagd om na te denken over welke onpage factoren jij zou gebruiken om relevantie van een document te bepalen, heb je wellicht ook gedacht aan de frequentie van de querytermen. Het is een logische stap om meer waarde toe te kennen aan een document die je gezochte term vaker gebruikt. Dat het advies dat je tekst voor 1,5% uit je focus keyword moet bestaan te simpel is gedacht, zal ik proberen duidelijk te maken aan de hand van de komende voorbeelden. Hier zullen wat formules naar voren komen, maar zoals ik al zei het gaat om de grote lijnen van het verhaal.  

We beginnen eenvoudig. In onderstaande tabel zijn de getallen het aantal weergaven van een term in het document (ook wel: term frequency of tf). Aan jou de taak om te bedenken welk document beter scoort voor de query: kroketten en bitterballen

 

kroketten

en

snackbar

bitterballen

amsterdam

Document 1

8

10

3

2

0

 

Document 2

1

20

3

9

2

 

DocN

 

Query

1

1

0

1

0

 

 De score voor beide documenten zou als volgt zijn:
score(“kroketten en bitterballen”, Document 1) = 8 + 10 + 2 = 20
score(“kroketten en bitterballen”, Document 2) = 1 + 20 + 9 = 30

Document 2 sluit in dit geval beter aan op de zoekopdracht. Nu is natuurlijk de vraag of de term “en” wel zo belangrijk is in de query. Eigenlijk is het een stopwoord en zou er weinig waarde aan moeten worden toegekend. Dit kunnen we bereiken door gebruik te maken van inverse document frequency (tf-idf). Waar document frequency (df) het aantal documenten is waar een term in voorkomt, is inverse het tegenovergestelde daarvan. Naarmate het aantal documenten waarin een term voorkomt meer is, wordt idf juist kleiner.

Idf bereken je door het totaal aantal documenten in je corpus te delen door het aantal documenten dat de term bevat. Vervolgens neem je daar de ‘log’ van. Oftewel:

Stel, de idf van onze query termen zijn als volgt:
Idf(kroketten)           = 5
Idf(en)                       = 0.01
Idf(bitterballen)        = 2

Dan krijg je de volgende scores:
score(“kroketten en bitterballen”, Document 1) = 8*5  + 10*0.01 + 2*2 = 44.1
score(“kroketten en bitterballen”, Document 2) = 1*5 + 20*0.01 + 9*2 = 23.2

Nu heeft document 1 de beste score. Wat we nu echter nog niet hebben meegenomen, is het feit dat het ene document veel langer kan zijn dan het andere document. Het langere document heeft op deze manier al snel een hogere score dan een kleiner document, terwijl het kleinere document misschien veel relevanter is.

Vector model
Dit kunnen we eenvoudig oplossen door te kijken naar de cosinus similarity van een document. Een exacte uitleg van de theorie erachter gaat wat te ver voor in dit artikel, maar het komt neer op een soort harmonisch gemiddelde van de termen in een document. Je kunt hier een excel bestand downloaden, zodat je er even mee kan spelen. Er staat een uitleg in het bestand zelf. Je hebt de volgende metrics nodig:

  • Termen – elke afzonderlijke term van de zoekopdracht
  • Document frequentie – Hoeveel documenten kent Google die de afzonderlijke term bevatten
  • Term frequentie - De frequentie voor elke term in het document (Voeg deze Focus Keyword Bookmarklet gemaakt door Sander Tamaëla toe aan je favorieten om dit makkelijker te maken)

Hieronder een voorbeeld van een berekening waarbij op basis van dit model ook daadwerkelijk de content is aangepast. De website had een pagina die was ingericht op “fiets kopen”. Alleen de verkeerde pagina(de homepage) rankte voor de query.

Voor de formule moeten we onder andere de eerder genoemde inverse document frequency (idf) uitrekenen. Hiervoor hebben we het totaal aantal documenten in de index van Google nodig. Hiervoor ga ik uit van N = 10.4 miljard. Een uitleg van de termen in de tabel hieronder:

•          tf = term frequency
•          df = document frequency
•          idf = inverse document frequency
•          Wt,q = weight for term in query
•          Wt,d = weight for term in document
•          Product = Wt,q * Wt,d
•          Score = Sum of the products

http://www.fietsentoko.nl/

term

query

document

product

 

tf

df

idf

Wt,q

tf

Wf2

Wt,d

 

Fiets

1

25.500.000

3.610493159

3.6105

21

441

0.70711

2.55302

Kopen

1

118.000.000

2.945151332

2.9452

21

441

0.70711

2.08258

 

 

 

 

 

 

 

totaal

4.6356

http://www.fietsentoko.nl/fietsen/

term

query

Document

product

 

tf

df

idf

Wt,q

tf

Wf2

Wt,d

 

Fiets

1

25.500.000

3.610493159

3.6105

22

484

0.61782

2.23063

Kopen

1

118.000.000

2.945151332

2.9452

28

784

0.78631

2.31584

 

 

 

 

 

 

 

totaal

4.54647

Hoewel de term in het tweede document vaker voorkomt, is de score van het document toch lager in vergelijking met het eerste document. De oorzaak voor dit verschil is dat het evenwicht van het gebruik van de termen weg is. Naar aanleiding van deze berekening heb ik de tekst voor de pagina aangepast, waarna de score als volgt is:

term

query

document

product

 

tf

df

idf

Wt,q

tf

Wf2

Wt,d

 

Fiets

1

25.500.000

3.610493159

3.6105

28

784

0.78631

2.83897

Kopen

1

118.000.000

2.945151332

2.9452

22

484

0.61782

1.81960

 

 

 

 

 

 

 

totaal

4.6586

Op dit moment rankt dit document ook weer voor de term (fiets kopen) waarvoor was geoptimaliseerd. Hieruit kunnen we (kort door de bocht) concluderen dat het aantal keren dat je een term gebruikt niet perse belangrijk is. Het is belangrijker om de juiste harmonie te vinden voor de termen waarop je wilt ranken.

Het proces versnellen
Om deze berekening uit te voeren voor elk document dat voldoet aan de zoekopdracht, kost natuurlijk ongelofelijk veel rekenkracht. Je kunt dit oplossen door bepaalde statische waardes mee te nemen om zodoende te bepalen voor welke documenten je deze score wilt berekenen. Hiervoor zou je bijvoorbeeld PageRank kunnen gebruiken. Als je eerst een selectie maakt van documenten die aan de query voldoen en daarvan 100 documenten pakt met de hoogste PageRank, hoef je al minder vaak de berekening uit te voeren. Daarnaast zou je voor elke afzonderlijke term een championslist kunnen maken. Door voor elke term alleen de top N documenten te pakken met de beste score, kan je wederom het aantal berekeningen beperken. Zodoende kun je vanuit deze ‘championslist’ bekijken welk van de documenten alle querytermen bevat. Vervolgens kun je op basis van deze resultaten de score berekenen. Indien er te weinig documenten zijn die al deze termen bevatten, kun je alsnog in alle bestanden zoeken naar documenten die aan deze query voldoen.

Relevance feedback
Relevantie feedback is het toekennen van meer of minder waarde aan een term in een query op basis van de relevantie van een document. Met behulp van relevantie feedback, kan je eigenlijk onder de motorkap de zoekopdracht van de gebruiker aanpassen.

De eerste stap bij relevantie feedback is uiteraard bepalen of een document relevant is of niet. Hoewel er zoekmachines zijn waarbij je per resultaat kan aangeven of een document relevant is of niet, heeft Google lange tijd niet zo’n functie gehad. Inmiddels is er natuurlijk de +1 functie, waarmee Google deze functie in een iets ander jasje heeft gegoten. Als er maar genoeg mensen bij een resultaat de +1 knop indrukken, gaat Google vanzelf het document als relevant beschouwen voor de ingevoerde query.

Een andere methode voor het bepalen van de relavantie is het kijken naar de huidige pagina’s die goed ranken. Deze worden geacht relevant te zijn, dus je kan de best rankende pagina’s beschouwen als relevant. Het gevaar dat hier in schuilt is topicdrift. Als je op zoek bent naar bitterballen en kroketten, en de best rankende pagina’s zijn toevallig allemaal snackbars in Amsterdam, schuilt het gevaar dat je ook waarde aan Amsterdam gaat toekennen.

Daarnaast kun je ook kijken naar de CTR van verschillende pagina’s. Pagina’s waar de CTR hoger is en de bouncerate lager dan gemiddeld, zullen wel relevant zijn. Pagina’s waar de bouncerate hoog is worden geacht niet relevant te zijn. Pagina’s waarvan de CTR juist lager is dan je zou mogen verwachten op die positie, zullen waarschijnlijk ook irrelevant zijn. Al met al kan Google dus veel over relevantie bepalen aan de hand van datamining.

Aan de hand van Rochio’s feedback formule kunnen we laten zien hoe deze data kan worden gebruikt. In feite komt het neer op het aanpassen van de waarde van elke term in de query en eventueel het toevoegen van extra querytermen. De formule hiervoor is als volgt:

image: 1334098079 c914e3b6a3703bc9b440b90f73495c65 Zoekmachinealgoritmes, een kijkje onder de motorkap 

Onderstaande tabel is een visuele weergave van deze formule. Stel, we kennen de volgende waardes toe:
Querytermen: +1 (alpha)
Relevante termen: +1 (beta)
Niet relevante termen: -0.5 (gamma)

We gebruiken de volgende query:
“kroketten en bitterballen”

De relevantie van de documenten is als volgt:
Document 1   : relevant
Document 2   : relevant      
Doc3   : niet relevant

Termen

Q

Document 1

Document 2

Doc3

Waarde nieuwe query

Kroketten

1

1

1

0

1 + 1 – 0         = 2

En

1

1

0

1

1 + 0.5 – 0.5   = 1

Bitterballen

1

0

0

0

1 + 0 – 0         = 1

Snackbar

0

0

1

0

0 + 0.5 – 0      = 0.5

Amsterdam

0

0

0

1

0 + 0 – 0.5      = -0.5  = 0

De nieuwe query wordt dan als volgt:
Kroketten(2) en(1) bitterballen(1) snackbar(0.5)

De waarde achter elke term is het gewicht dat het krijgt in de query. Dat gewicht kunnen we weer gebruiken in onze vector berekening. Hoewel Amsterdam volgens de formule -0.5 als waarde moest krijgen, zetten we negatieve getallen terug op 0. Op deze manier sluiten we geen termen uit in de zoekresultaten. Hoewel snackbar niet voorkwam in de originele query, krijgt deze toch een gewicht in de nieuwe query.

Stel dat Google deze manier van relevance feedback gebruikt, dan zou je bij het schrijven van teksten voor de website kunnen kijken naar pagina’s die al ranken voor een bepaalde query. Door hetzelfde woordgebruik te hanteren, zorg je dat je optimaal profiteert van deze manier van relevantie feedback.

Takeaways
In het kort hebben we nu gekeken naar een van de mogelijkheden om een waarde toe te kennen aan een document. Deze methode is gebaseerd op de inhoud van de pagina. Hoewel de vector methode vrij nauwkeurig is, is het zeker niet de enige methode om relevantie te berekenen. Er zijn vele aanpassingen op het model. Daarnaast blijft het slechts een onderdeel van het complete algoritme van zoekmachines als Google. Tot slot hebben we gekeken naar relevantiefeedback. Ik hoop dat ik je wat inzichten heb gegeven in methodes die zoekmachines kunnen gebruiken, anders dan externe factoren. 

Over de auteur

Rolf Broer, SEO consultant

Rolf Broer was in de periode 2010 - 2013 SEO consultant bij Onetomarket. Destijds gaf hij advies over zoekmachine optimalisatie en werkte o.a. voor klanten als Conrad Electronic, Wensink, Bruna en Wegener. Daarnaast test hij veel uit op FietsenToko.nl, RolfBroer.nl, Postcode zoeken en Netnummer zoeken