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:
- je homepage, via https en via http (om te zien of http doorstuurt naar https)
- /robots.txt
- je sitemap: het adres uit robots.txt, of anders /sitemap.xml
- /llms.txt
- alleen als je site WordPress gebruikt: /feed/, om het versienummer te lezen
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
- PageSpeed Insights van Google (www.googleapis.com). Google laadt je homepage zelf, zoals een telefoon dat doet, en meet hoe snel en hoe goed bruikbaar hij is. Die verzoeken komen van Google, niet van onze scanner.
- WordPress (api.wordpress.org). Hier vragen we op wat de nieuwste versie van WordPress is. Dat raakt jouw site niet.
Wat de scanner niet doet
- Hij logt niet in en vult geen formulieren in.
- Hij raadt geen adressen, zoals een beheerpagina of een back-up. Hij vraagt alleen de vaste adressen hierboven op.
- Hij zoekt niet naar zwakke plekken en probeert niets uit.
- Hij gebruikt alleen poort 80 en 443, de gewone poorten voor websites.
- Hij scant geen interne of private adressen, zoals een netwerk thuis of op kantoor.
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.
- een menukaart, zoals "menukaart", "onze kaart", "lunchkaart"
- reserveren, zoals "reserveren", "reserveer", "reservering"
- bestellen of bezorgen, zoals "bestel online", "online bestellen", "bestel nu"
- eten en drinken, zoals "lunch", "lunchen", "diner"
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:
| Meting | Goed | Matig | Onvoldoende | Bron |
|---|---|---|---|---|
| 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,1 | de zwakste is matig: LCP tot 4 seconden, INP tot 500 milliseconden, CLS tot 0,25 | een van de drie is slechter | web.dev, Core Web Vitals |
| Largest Contentful Paint (hoe snel het grootste deel van je pagina in beeld staat) | tot 2,5 seconden | tot 4 seconden | boven 4 seconden | web.dev, Core Web Vitals |
| First Contentful Paint (hoe snel er iets in beeld staat) | tot 1,8 seconden | tot 3 seconden | boven 3 seconden | web.dev, First Contentful Paint |
| Speed Index (hoe snel je pagina zich vult) | tot 3,4 seconden | tot 5,8 seconden | boven 5,8 seconden | Chrome for Developers, Speed Index |
| Total Blocking Time (hoe lang je pagina niet reageert tijdens het laden) | tot 200 milliseconden | tot 600 milliseconden | boven 600 milliseconden | Chrome for Developers, Total Blocking Time |
| Cumulative Layout Shift (hoeveel je pagina verspringt tijdens het laden) | tot 0,1 | tot 0,25 | boven 0,25 | web.dev, Core Web Vitals |
| Reactietijd van de server (Time to First Byte, hoe snel je server antwoordt) | tot 0,8 seconden | tot 1,8 seconden | boven 1,8 seconden | web.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
| Totaalcijfer | Kop | Opfrisniveau |
|---|---|---|
| 9,0 of hoger | je site is helemaal bij | geen opfrisbeurt nodig |
| 8,0 tot en met 8,9 | je site staat er goed voor | geen opfrisbeurt nodig |
| 7,0 tot en met 7,9 | toe aan een likje verf | likje verf |
| 6,0 tot en met 6,9 | toe aan een opknapbeurt | opknapbeurt |
| 5,0 tot en met 5,9 | toe aan een flinke opknapbeurt | flinke opknapbeurt |
| 4,0 tot en met 4,9 | toe aan een verbouwing | verbouwing |
| lager dan 4,0 | tijd voor een verbouwing | verbouwing |
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:
- jQuery: GitHub, tags van jquery/jquery
- Bootstrap: GitHub, tags van twbs/bootstrap
- WordPress: GitHub, tags van WordPress/wordpress-develop
- PHP: GitHub, tags van php/php-src
Als de meting van Google niet lukt
Deze toetsregels komen uit PageSpeed Insights:
- Lighthouse toegankelijkheid, mobiel
- Contrast van tekst
- Klikdoelen groot genoeg
- Lighthouse prestaties, mobiel
- Snelheid bij echte bezoekers (Chrome-gegevens van Google over de laatste 28 dagen: LCP, INP en CLS)
- Largest Contentful Paint (hoe snel het grootste deel van je pagina in beeld staat)
- First Contentful Paint (hoe snel er iets in beeld staat)
- Speed Index (hoe snel je pagina zich vult)
- Total Blocking Time (hoe lang je pagina niet reageert tijdens het laden)
- Cumulative Layout Shift (hoeveel je pagina verspringt tijdens het laden)
- Reactietijd van de server (Time to First Byte, hoe snel je server antwoordt)
- Paginagewicht (eigen grens)
- Aantal verzoeken (hoeveel bestanden je homepage laadt, eigen grens)
- Afbeeldingen: formaat en grootte
- Lighthouse SEO, mobiel
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.
| Toetsregel | Gewicht | Goed (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):
- Wie, wat en waar in gewone tekst (eigen grens)
- Bedrijfsgegevens overal gelijk
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):
- Kop en actie bovenaan (eigen grens: boven de eerste tussenkop)
- Slider op de homepage
3. Werkt het op hun telefoon?
Deze vraag telt voor 1/3 van het totaal.
| Toetsregel | Gewicht | Goed (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.
| Toetsregel | Gewicht | Goed (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):
- Een copyrightjaar van meer dan 3 jaar geleden, of tabellen voor de opmaak
- Trackers vóór toestemming (indicatie)
- KvK-nummer en adres zichtbaar
- Reviews zichtbaar
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):
- Hoofdmenu (eigen grens)
- Diensten en prijzen vindbaar
- Openingstijden of bereikbaarheid
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):
- Contact met één tik
- Afspraak maken of aanvragen
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.
- Een fout in je uitslag: we kijken de scan na. Klopt een toetsregel niet, dan passen we de regel aan voor iedereen. Deze pagina verandert dan mee.
- Niet gescand worden: we zetten je domein op een lijst, zodat de scanner het niet meer opvraagt.
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.