donderdag 19 september 2013

Jacob Nielsen is kaput

Hoe kun je uit een handvol woorden afleiden wat iemand wil? En hoe kun je uit één woord afleiden wat iemand zoekt? Google is er groot mee geworden, maar hoe doe je dat?

Mensen snappen vragen van andere mensen meestal meteen. Iedereen die Nederlands spreekt, begrijpt dit:

“Wil je koffie?”

Met één woord kunnen we ook wel uit de voeten, zolang de context maar duidelijk is.

“Soep?”

Als we met een winkelwagentje in de supermarkt voor het schap met soepblikken staan, betekent deze vraag iets anders dan wanneer we in de keuken in een soeppan staan te roeren. In een andere context betekent een vraag iets anders.

Bloopers of viral marketing?

Op Twitter maakte een collega-usabilityspecialist een grapje over de zoekresultaten van HEMA. Als je naar ‘slet’ zoekt, toont HEMA een lijst met sloten. De een vindt zo’n grapje hilarisch, de ander vindt hem flauw, maar dat is typisch Twitter.

Zoekresultaten van slet bij HEMA

HEMA staat bekend om viral marketing. Sommige ‘bedrijfsongevallen’ zijn bij HEMA bewust opgezette marketingcampagnes. De bekendste viral is nog te vinden op producten.hema.nl, een webpagina die speciaal voor de lancering van de webwinkel van HEMA werd opgezet door reclamebureau CCCP. Klik maar eens op een product…

Ik vermoed daarom dat mijn collega-usabilityspecialist dacht aan een vergelijkbaar voorval: een dildo tussen kinderspeelgoed bij webwinkel wehkamp.nl. Volgens wehkamp.nl was dit incident echter een “uitzondering” en een “menselijke fout”. Het product heeft uiteindelijk maar zo’n twintig minuten online gestaan.

Bij HEMA is het slot als antwoord op slet echter geen menselijk fout en geen viral marketing. En vermoedelijk geen toeval: het is gewoon inherent aan hoe een goed zoeksysteem zoekt. Het zoeksysteem werkt nog steeds zo. Probeer maar.

Vladimir Levenshtein

Vladimir Levenshtein is een Russische wetenschapper die in de informatica bekend is om de naar hem vernoemde Levenshtein-afstand. De Levenshtein-afstand is het aantal iteraties dat moet worden uitgevoerd om van een woord bij een ander woord uit te komen. Of eenvoudiger gezegd: de Levenshtein-afstand is het aantal keer dat je een letter moet invoegen, verwijderen of vervangen om een woord te veranderen in een ander woord.

De Levenshtein-afstand tussen onze soep en een stoep is 1, want je hoeft maar 1 letter in te voegen. De Levenshtein-afstand tussen soep en poep is ook maar 1, want je hoeft maar 1 letter te vervangen. Zo ontstaan woordgrapjes. Of rijmpjes en sinterklaasgedichten: poep op de stoep, met een Levenshtein-afstand van 2.

Voor search is de algoritme van Levenshtein erg handig, misschien zelfs onmisbaar. In een van mijn webwinkels zocht iemand bijvoorbeeld eens naar ‘brantweer’ met een t in plaats van brandweer met een d. Iemand anders die een truck bleek te zoeken, typte daarvoor ‘truc’ zonder k. In beide gevallen is de gelijkenis tussen de fout en de verbetering groot: de Levenshtein-afstand is maar 1.

Je kunt stellen dat de algoritme van Levenshtein niet slechts de afstand tussen woorden maar daarmee vooral de nabijheid van informatie uitdrukt. Hoe kleiner de afstand, hoe groter de nabijheid: de Levensthein-afstand tussen ‘brantweer’ en brandweer is maar 1. En als iemand om de ‘brantweer’ schreeuwt, weten we dat hij dringend de brandweer nodig heeft.

Mensen maken fouten. Goede software vergeeft daarom menselijke fouten. Of reikt de helpende hand, zoals Google: “Bedoelde u …?” Als we dit niet kunnen vinden, dan bedoelde je misschien dat.

Dáárom kan een goed zoeksysteem via een slet uitkomen op een slot.

Jakob Nielsen

Jakob Nielsen is een beroemde en enigszins beruchte usabilityspecialist. Als je op de website van zijn bedrijf zoekt naar Jakob Nielsen, krijg je een schoolvoorbeeld van hoe een zoekresultaat er bij een commerciële serviceorganisatie kan uitzien. Boven in de zoekresultaten staat een korte bio mét portretfoto van Jakob Nielsen. Daaronder volgen overzichten van zijn belangrijkste publicaties en tot slot worden op het derde niveau specifieke webpagina’s genoemd. Op het moment van schrijven zijn dat net geen driehonderd zoekresultaten.

Maar Jakob Nielsen heeft geen gemakkelijke naam. Hij klaagt er zelf wel eens over! Het van oorsprong Deense Jakob wordt door Amerikanen al gauw tot ‘Jacob’ met een c verengelst. En het Deense Nielsen met een e wordt vaak ‘Nielson’ met een o, een spellingvariant die eveneens in het Deens voorkomt.

Als we echter zoeken naar ‘Jacob Nielson’, met een Levenshtein-afstand van 2, dan worden er slechts twee resultaten voor twee artikelen getoond. Meer niet. Bij ‘Jacob Nielsen’ met een Levenshtein-afstand van 1 zien we dezelfde twee zoekresultaten, hoewel Jakob weet dat vooral zijn voornaam vaak verkeerd wordt gespeld. Alleen bij ‘Jakob Nielson’, eveneens met een Levenshtein-afstand van 1, zien we de juiste zoekresultaten.

Een zoeksysteem dat maar half werkt, is kaput, ook een Levenshtein-afstand van 1.

Vijf tips voor on-site search

Een goed zoeksysteem bouwen is een van de zwaarste opgaven voor een webdeveloper. Ik schrijf deze blogpost als ‘adempauze’ terwijl ik aan de zoveelste versie van mijn zoeksysteem sleutel. Maar onmogelijk is het zeker niet. Als je drie van de volgende vijf tips opvolgt, kom je al een heel eind.

1. Registreer zoekopdrachten

Gebruikers van je website vertellen je zelf wat ze zoeken. En ze vertellen je dat in hun eigen woorden! Registreer daarom elke zoekopdracht. Een zoekopdracht is niet slechts een technisch instructie aan je zoeksysteem. Het is een persoonlijke opdracht van een gebruiker: “Ik wil graag …”

2. Registreer navigatiepaden

Hoe weet ik dat iemand die truc typte op zoek was naar een truck en niet naar een handig trucje? Heel eenvoudig: doordat deze gebruiker daarna doorklikte naar webpagina’s met vrachtwagens… Wat je niet direct uit zoekwoorden kunt afleiden, kun je vaak wel indirect afleiden uit andere interactie van een gebruiker met een website. Registreer daarom welke route zoekende gebruikers afleggen door een site.

3. Zoek naar vormvarianten

In MySQL, het belangrijkste databaseplatform voor websites, kun je goed fuzzy zoeken met een full-text search. Voor de algoritme van Levenshtein kun je de gelijknamige functie levenshtein() van PHP gebruiken. Zoeken op klanken kan ook, bijvoorbeeld met de functie soundex() in PHP of de vergelijkbare functie SOUNDEX() in MySQL. Hoewel Engels beter wordt ondersteund dan Nederlands, kun je daarmee brandweer vinden wanneer iemand naar ‘brantweer’ zoekt.

4. Zoek in een context

Een zoekopdracht wordt gestart vanuit een concrete context: een webpagina met een zoekvak. Daarmee heb je veelal aanvullende informatie waarmee je betere zoekresultaten kunt tonen. Iemand die een zoekopdracht start vanuit een fotoalbum, zoekt waarschijnlijk een foto en geen wetenschappelijk artikel. Iemand die een zoekopdracht start vanuit een webpagina met laptops zoekt een laptop of misschien een laptophoes of een laptoptas, maar waarschijnlijk geen oordopjes, geen trampoline en ook geen vitaminesupplement.

5. Toon suggesties

Fouten voorkomen is beter dan fouten verhelpen. Toon daarom hints terwijl een gebruiker een zoekopdracht intoetst. Een AutoComplete in HTML5 is daarvoor een eenvoudige maar doeltreffende oplossing. Kun je technisch de lat hoger leggen, dan kun je nog meer bereiken met Ajax (Asynchronous JavaScript and XML), bijvoorbeeld om afbeeldingen in de hints te tonen.

Géén keyword stuffing en géén slechte content

Sommigen hoor ik al denken: “Als ik nu brantweer naast brandweer opneem in mijn webteksten, dan help ik die ene gebruiker. Dan word ik door zulke gebruikers ook beter gevonden door Google. En dan word ik door Google beloond: het is goed voor mijn zoekmachineoptimalisatie.”

Maar het helpt niemand. Het werkt averechts. Slechte webteksten leiden tot slechte content. Slechte content vind je op slechte websites, niet op goede.

Voor Google is een goed begrip van mensentaal van levensbelang. Uit een spin-off zoals Google Translate kun je afleiden dat Google al jaren hard werkt aan de technologie die dit faciliteert. Uit de hints die Google bij spelfouten toont boven de zoekresultaten, kun je niet anders dan concluderen dat Google wéét wat fout is. En als Google weet dat je fout zit, is dat nog een reden om het maar liever goed te doen. Anders krijg je van Google misschien ooit nog een onvoldoende voor slechte webteksten.

1 opmerking:

  1. Vroeger dacht ik zo :-)
    Ik heb jarenlang bewust zowel het woord prinsessejurk als prinsessenjurk gebruikt op mijn site. Zelfs in de adwords campagne. Was een heel goed scorend woord.

    Totdat Google met de automatische spellingscorrectie kwam. Toen heb ik het gelijk aangepast omdat het niet meer functioneel was. Ik heb en had zelfs de indruk dat verkeerde spelling strafpunten kreeg.

    Daar herken je de nawauwelaar aan; de SEOexpert die na die google-update nog taalfouten adviseerde. Of erger, nog steeds adviseert.

    BeantwoordenVerwijderen