Websiteopfrissen

Zo werkt de Opfrisscan

De Opfrisscan bekijkt de homepage van een website en geeft een rapportcijfer. Hier lees je wat de scanner bij je site opvraagt en hoe je cijfer tot stand komt, zodat je elke uitslag zelf kunt controleren.

De scanner komt alleen langs als iemand je adres invult op websiteopfrissen.nl, of als wij je site zelf scannen. Hij zoekt zelf geen sites op.

Deze pagina wordt gemaakt uit dezelfde instellingen als de scanner. Verandert er een regel of een grens, dan verandert deze pagina mee.

Wat de scanner leest

De scanner kijkt alleen en leest wat je website aan elke bezoeker laat zien. Dit zijn de adressen die hij opvraagt:

Daarbij kijkt hij naar de HTML van de homepage, de headers die je server meestuurt en het certificaat van je site.

De scanner doet hooguit 10 verzoeken per scan bij jouw site. Een doorverwijzing volgt hij hooguit 5 keer. Van elk antwoord leest hij hooguit 2 MB.

Twee bronnen buiten je site

Wat de scanner niet doet

Niet te zien

Soms kan de scanner iets van buitenaf niet vaststellen. Veel servers laten bijvoorbeeld hun PHP-versie niet zien. Dan staat er bij die toetsregel "Niet te zien".

Niet te zien telt niet mee in je cijfer, niet als goed en niet als fout. Het betekent dat we het van buitenaf niet konden zien, en dus niet dat het veilig of in orde is.

Een tijdelijke pagina

Staat op je homepage alleen een tijdelijke melding, zoals "binnenkort", "vernieuwd", "under construction", en minder dan 100 woorden? Dan geven we geen cijfer, ook niet per vraag. Je ziet dan: "Op je homepage staat nu alleen een tijdelijke melding. Daarom geven we geen cijfer." De toetsregels die naar de inhoud van je homepage kijken, staan dan op Niet te zien.

Een pagina die zich pas in de browser opbouwt

Staan er minder dan 30 woorden in de HTML, en wel veel script, dan bouwt je homepage zich pas in de browser op. De scanner ziet dan niet wat er op staat. Deze toetsregels staan dan op Niet te zien: Kop en actie bovenaan, Contact met één tik, Hoofdmenu, Slider op de homepage, H1, Wie, wat en waar in gewone tekst, Bedrijfsgegevens overal gelijk, KvK-nummer en adres zichtbaar, Reviews zichtbaar, Diensten en prijzen vindbaar, Openingstijden of bereikbaarheid en Afspraak maken of aanvragen. Bij de vraag staat dat erbij.

Restaurants, cafés en bezorgers

De scanner weet niet in welke branche je zit. Daarom kijkt hij naar je homepage zelf. Staat in de bedrijfsgegevens in de code dat je bijvoorbeeld een restaurant, café of bakker bent? Of zien we minstens 2 van deze 4 dingen? Dan gaat je uitslag over reserveren en bestellen in plaats van een afspraak, en over je menukaart in plaats van je diensten.

Eén ervan is niet genoeg. Ook een kapper schrijft soms "reserveren".

Hoe je cijfer tot stand komt

De scan kijkt naar 6 vragen die je klant zich stelt. Drie daarvan kunnen we van buitenaf meten: "Vinden ze je?", "Werkt het op hun telefoon?" en "Straalt je site betrouwbaarheid uit?". Alleen die drie maken je cijfer, en elke vraag telt even zwaar: 1/3 van het totaal.

Signalen

Bij "Snappen ze meteen wat je doet?", "Vinden ze wat ze zoeken?" en "Kunnen ze je makkelijk bereiken of boeken?" lezen we de tekst en de opbouw van je homepage. Zo'n lezing kan fout gaan: een knop met een ander woord, of prijzen op een andere pagina. Daarom geven we bij die vragen geen cijfer en geen Ja, Deels of Nee. We noemen alleen wat we zagen, zoals "We zagen een belknop bovenaan je homepage." Daarna vragen we je zelf te kijken. Zagen we niets, dan staat er: "Hier konden we van buitenaf weinig over zeggen."

Ook bij de drie meetvragen lezen we een paar dingen, zoals reviews en je KvK-nummer. Dat zijn ook signalen: ze staan op je uitslag, maar tellen niet mee in je cijfer. Een signaal zegt nooit dat iets ontbreekt.

Van toetsregel naar cijfer

Elke toetsregel geeft goed (100 punten), matig (50 punten) of onvoldoende (0 punten). Een regel weegt 1, 2, 3 of 4 keer mee. Per vraag nemen we het gewogen gemiddelde van de regels die we konden zien, en delen dat door 10. Zo krijg je een rapportcijfer met één decimaal.

Is minder dan de helft van het gewicht van een vraag te zien, dan krijgt die vraag geen cijfer.

Bij elke meetvraag staat ook een kort antwoord: Ja vanaf 8,0, Deels vanaf 5,5, en anders Nee.

Het totaalcijfer is het gemiddelde van de 3 meetvragen. Heeft een van de 3 geen cijfer, dan geven we geen totaalcijfer. Je ziet dan: "We konden te weinig zien voor een cijfer".

Je cijfer komt alleen uit de meetregels op deze pagina. Er telt geen mening over je ontwerp mee.

We vergelijken je site niet met andere sites. Je cijfer zegt iets over je eigen homepage, op de dag van de scan.

Snelheid op een telefoon

Bij de vraag "Werkt het op hun telefoon?" meten we de snelheid op meer manieren dan één score. Voor deze metingen gebruiken we de grenzen van Google:

MetingGoedMatigOnvoldoendeBron
Snelheid bij echte bezoekers (Chrome-gegevens van Google over de laatste 28 dagen: LCP, INP en CLS)alle drie goed: LCP tot 2,5 seconden, INP tot 200 milliseconden, CLS tot 0,1de zwakste is matig: LCP tot 4 seconden, INP tot 500 milliseconden, CLS tot 0,25een van de drie is slechterweb.dev, Core Web Vitals
Largest Contentful Paint (hoe snel het grootste deel van je pagina in beeld staat)tot 2,5 secondentot 4 secondenboven 4 secondenweb.dev, Core Web Vitals
First Contentful Paint (hoe snel er iets in beeld staat)tot 1,8 secondentot 3 secondenboven 3 secondenweb.dev, First Contentful Paint
Speed Index (hoe snel je pagina zich vult)tot 3,4 secondentot 5,8 secondenboven 5,8 secondenChrome for Developers, Speed Index
Total Blocking Time (hoe lang je pagina niet reageert tijdens het laden)tot 200 millisecondentot 600 millisecondenboven 600 millisecondenChrome for Developers, Total Blocking Time
Cumulative Layout Shift (hoeveel je pagina verspringt tijdens het laden)tot 0,1tot 0,25boven 0,25web.dev, Core Web Vitals
Reactietijd van de server (Time to First Byte, hoe snel je server antwoordt)tot 0,8 secondentot 1,8 secondenboven 1,8 secondenweb.dev, Time to First Byte

De meting bij echte bezoekers komt uit de gegevens die Chrome bij bezoekers van je site verzamelt, over de laatste 28 dagen. Google kijkt naar de waarde die 3 van de 4 bezoeken halen. Heeft Google genoeg van die gegevens, dan telt deze meting 4 keer mee, zwaarder dan de Google-test (3 keer). Heeft Google te weinig gegevens, wat bij kleine sites vaak zo is, dan staat hij op Niet te zien en telt hij niet mee.

Van cijfer naar opfrisniveau

TotaalcijferKopOpfrisniveau
9,0 of hogerje site is helemaal bijgeen opfrisbeurt nodig
8,0 tot en met 8,9je site staat er goed voorgeen opfrisbeurt nodig
7,0 tot en met 7,9toe aan een likje verflikje verf
6,0 tot en met 6,9toe aan een opknapbeurtopknapbeurt
5,0 tot en met 5,9toe aan een flinke opknapbeurtflinke opknapbeurt
4,0 tot en met 4,9toe aan een verbouwingverbouwing
lager dan 4,0tijd voor een verbouwingverbouwing

Draait je site op een versie van PHP of WordPress die geen beveiligingsupdates meer krijgt? Dan is het opfrisniveau nooit gunstiger dan opknapbeurt. Je cijfer blijft wel staan, want dat is een meting. Onder de kop lees je de reden.

Oude techniek

Ziet de scanner oude techniek, dan staat onder de kop bijvoorbeeld: "Je site draait op techniek uit 2015 of ouder." We kijken naar de versies van jQuery, Bootstrap, WordPress en PHP en naar het copyrightjaar op de pagina. Het oudste signaal bepaalt het jaar. We tonen de zin alleen als dat jaar 5 jaar of langer geleden is. De zin telt niet mee in je cijfer.

Het jaar van een versie is het jaar waarin die versie voor het eerst uitkwam. Bronnen:

Als de meting van Google niet lukt

Deze toetsregels komen uit PageSpeed Insights:

Google meet je homepage op de telefoon drie keer, na elkaar. Elke meting geeft net iets andere waarden. Daarom telt per meetwaarde de middelste van de drie. Zo bepaalt één toevallig snelle of trage meting je uitslag niet. Lukken er maar twee, dan telt per meetwaarde de minst gunstige van de twee. Lukt er één, dan telt die.

Lukt een meting niet, dan proberen we het nog één keer. Zegt Google dat het even te druk is, dan wachten we eerst 10 seconden. Lukt er dan geen enkele meting, dan geven we geen totaalcijfer en geen opfrisniveau. Je ziet dan: "We konden je site niet helemaal meten." Zo maakt een meting die niet lukte je uitslag nooit gunstiger.

Alle toetsregels

Per vraag zie je hieronder elke meetregel met zijn gewicht en zijn grenzen, en welke signalen we lezen. "Eigen grens" betekent dat er geen officiële norm is en dat wij de grens hebben gekozen.

1. Vinden ze je?

Deze vraag telt voor 1/3 van het totaal.

ToetsregelGewichtGoed (100 punten)Matig (50 punten)Onvoldoende (0 punten)
Lighthouse SEO, mobiel (via PageSpeed) 2 90 of hoger 70 tot 89 (eigen grens) onder 70
Title-tag 2 de paginatitel is 30 tot 60 tekens lang de paginatitel is korter dan 30 of langer dan 60 tekens (eigen grens: Google kapt lange titels af, een vaste lengte noemt Google niet) de pagina heeft geen titel
Meta description 1 de omschrijving voor Google is 70 tot 160 tekens lang de omschrijving is korter dan 70 of langer dan 160 tekens (eigen grens: Google kapt lange omschrijvingen af, een vaste lengte noemt Google niet) de pagina heeft geen omschrijving voor Google
H1 1 de homepage heeft precies één hoofdkop (h1) de homepage heeft meerdere hoofdkoppen de homepage heeft geen hoofdkop
Sitemap en robots.txt 1 de site heeft een robots.txt en een sitemap (de sitemap uit robots.txt, anders /sitemap.xml; een foutpagina of HTML telt als geen) de site heeft er maar één van de site heeft geen robots.txt en geen sitemap
LocalBusiness-gegevens 2 de code bevat bedrijfsgegevens (JSON-LD van het type LocalBusiness of een subtype, ook in @graph) met adres, telefoonnummer en openingstijden de bedrijfsgegevens in de code zijn niet compleet de code bevat geen LocalBusiness-gegevens, of zonder adres, telefoonnummer en openingstijden (alleen Organization telt hier niet)
AI-zoekcrawlers toegelaten 3 robots.txt laat de zoekcrawlers van OpenAI, Anthropic en Perplexity de homepage lezen, of de site heeft geen robots.txt (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot en Perplexity-User; crawlers die alleen lezen om een model te trainen, tellen niet mee) robots.txt blokkeert sommige AI-zoekcrawlers robots.txt blokkeert alle AI-zoekcrawlers
Tekst in de HTML zonder JavaScript 3 zonder JavaScript staan er 150 of meer woorden op de homepage (eigen grens) zonder JavaScript staan er 30 tot 149 woorden op de homepage (eigen grens) zonder JavaScript staan er minder dan 30 woorden op de homepage (eigen grens)
Organisatie als entiteit 1 de code beschrijft het bedrijf als organisatie (Organization of LocalBusiness) met sameAs-links naar profielen elders de code beschrijft het bedrijf als organisatie, maar zonder links naar profielen elders de code beschrijft het bedrijf niet als organisatie
llms.txt aanwezig telt niet mee de site heeft een llms.txt geen tussenstap de site heeft geen llms.txt

Signalen bij deze vraag (tellen niet mee in je cijfer):

2. Snappen ze meteen wat je doet?

Deze vraag telt niet mee in je cijfer. Op de uitslag staat wat we zagen, met deze vraag om zelf te kijken: "Kijk zelf: snapt je klant binnen vijf seconden wat je doet en wat hij daarna kan doen?"

Signalen bij deze vraag (tellen niet mee in je cijfer):

3. Werkt het op hun telefoon?

Deze vraag telt voor 1/3 van het totaal.

ToetsregelGewichtGoed (100 punten)Matig (50 punten)Onvoldoende (0 punten)
Lighthouse toegankelijkheid, mobiel (via PageSpeed) 2 90 of hoger 70 tot 89 (eigen grens) onder 70
Contrast van tekst (via PageSpeed) 2 Lighthouse color-contrast geslaagd geen tussenstap niet geslaagd
Klikdoelen groot genoeg (via PageSpeed) 1 Lighthouse target-size geslaagd geen tussenstap niet geslaagd
Lighthouse prestaties, mobiel (via PageSpeed) 3 90 of hoger 50 tot 89 onder 50
Snelheid bij echte bezoekers (Chrome-gegevens van Google over de laatste 28 dagen: LCP, INP en CLS) (via PageSpeed) 4 alle drie goed: LCP tot 2,5 seconden, INP tot 200 milliseconden, CLS tot 0,1 de zwakste is matig: LCP tot 4 seconden, INP tot 500 milliseconden, CLS tot 0,25 een van de drie is slechter
Largest Contentful Paint (hoe snel het grootste deel van je pagina in beeld staat) (via PageSpeed) 2 tot 2,5 seconden tot 4 seconden boven 4 seconden
First Contentful Paint (hoe snel er iets in beeld staat) (via PageSpeed) 1 tot 1,8 seconden tot 3 seconden boven 3 seconden
Speed Index (hoe snel je pagina zich vult) (via PageSpeed) 1 tot 3,4 seconden tot 5,8 seconden boven 5,8 seconden
Total Blocking Time (hoe lang je pagina niet reageert tijdens het laden) (via PageSpeed) 1 tot 200 milliseconden tot 600 milliseconden boven 600 milliseconden
Cumulative Layout Shift (hoeveel je pagina verspringt tijdens het laden) (via PageSpeed) 1 tot 0,1 tot 0,25 boven 0,25
Reactietijd van de server (Time to First Byte, hoe snel je server antwoordt) (via PageSpeed) 1 tot 0,8 seconden tot 1,8 seconden boven 1,8 seconden
Mobiele viewport 3 aanwezig geen tussenstap ontbreekt
Paginagewicht (eigen grens) (via PageSpeed) 1 onder 2 MB 2 tot 5 MB boven 5 MB
Aantal verzoeken (hoeveel bestanden je homepage laadt, eigen grens) (via PageSpeed) 1 tot 50 51 tot 100 meer dan 100
Afbeeldingen: formaat en grootte (via PageSpeed) 1 Lighthouse image delivery 0,9 of hoger geen tussenstap lager

4. Straalt je site betrouwbaarheid uit?

Deze vraag telt voor 1/3 van het totaal.

ToetsregelGewichtGoed (100 punten)Matig (50 punten)Onvoldoende (0 punten)
Verouderde techniek in de code: jQuery 1 of 2, Bootstrap 3, Flash of code voor IE8 (eigen grens) 2 geen één twee of meer
HTTPS en doorsturen 3 de site werkt via https en http stuurt door naar https de site werkt via https, maar http stuurt niet door de site werkt niet via https
Certificaat 3 het certificaat is geldig en nog meer dan 30 dagen bruikbaar het certificaat is geldig, maar verloopt binnen 30 dagen het certificaat is verlopen of ongeldig
PHP-versie (als zichtbaar) 3 een ondersteunde PHP-versie met de laatste beveiligingsupdates een ondersteunde PHP-versie, maar zonder de laatste beveiligingsupdates een PHP-versie die geen beveiligingsupdates meer krijgt
CMS-versie (als zichtbaar) 3 de laatste versie van WordPress een kleine update achter een grote update achter
Serverversie in headers 1 de server laat geen versienummer zien geen tussenstap de server laat zijn versienummer zien in de headers
Security headers 2 alle vier de headers zijn aanwezig: HSTS, X-Content-Type-Options, X-Frame-Options of CSP frame-ancestors, Referrer-Policy twee of drie van de vier headers zijn aanwezig nul of één van de vier headers is aanwezig
Mixed content (onderdelen die nog via http laden) 1 de https-pagina laadt geen onderdelen via http geen tussenstap de https-pagina laadt scripts, stijlen of beelden via http

Signalen bij deze vraag (tellen niet mee in je cijfer):

5. Vinden ze wat ze zoeken?

Deze vraag telt niet mee in je cijfer. Op de uitslag staat wat we zagen, met deze vraag om zelf te kijken: "Kijk zelf: vindt je klant snel wat je aanbiedt, wat het kost en wanneer je open bent?"

Signalen bij deze vraag (tellen niet mee in je cijfer):

6. Kunnen ze je makkelijk bereiken of boeken?

Deze vraag telt niet mee in je cijfer. Op de uitslag staat wat we zagen, met deze vraag om zelf te kijken: "Kijk zelf: ziet je klant binnen vijf seconden hoe hij je kan bereiken of boeken?"

Signalen bij deze vraag (tellen niet mee in je cijfer):

Zo herken je de scanner

De scanner stuurt bij elk verzoek deze User-Agent mee:

Opfrisscan/0.1 (+https://websiteopfrissen.nl/scanner)

Zo zie je in de logboeken van je server wanneer we je site hebben gescand.

Bezwaar of een fout melden

Klopt er iets niet in je uitslag? Of wil je niet dat we je site scannen? Mail ons op [PLAATSHOUDER: emailBezwaar]. Noem je domein en de datum van de scan.

We reageren binnen [PLAATSHOUDER: reactietermijn].

Je kunt de scanner ook zelf tegenhouden. Zet dan deze twee regels in je robots.txt:

User-agent: Opfrisscan
Disallow: /

De scanner vraagt dan alleen je robots.txt op en geeft geen cijfer.