Skip to main content
Terug naar blog

SEO Gids Stap 7: Beveiliging — De Baseline Die Google Verwacht in 2026

·11 min leestijd·door LANGR SEO

SEO Gids Stap 7: Beveiliging

Dit is Stap 7 van de 13-Stappen SEO Gids. Beveiliging gaat niet alleen om het beschermen van gebruikers — het heeft directe invloed op je zoekresultaten. Google gebruikt sinds 2014 HTTPS als een ranking signaal, en de verwachtingen zijn alleen maar toegenomen.


De meeste site-eigenaren beschouwen beveiliging als een binaire keuze: "We hebben SSL, dus we zijn veilig." In werkelijkheid evalueert Google tientallen beveiligingssignalen. Sites met de juiste beveiligingsheaders, geldige certificaten en geen mixed content scoren hoger dan sites met alleen een basis SSL-certificaat — mits alles verder gelijk is.

Het goede nieuws: de meeste beveiligingsfixes zijn eenmalige configuraties. Stel ze één keer in, en ze beschermen je rankings voor altijd.

SSL-configuratie

SSL (technisch gezien TLS) versleutelt de verbinding tussen je server en bezoekers. Sinds 2014 heeft Google HTTPS expliciet bevestigd als een ranking signaal. In 2026 is het ontbreken van HTTPS niet alleen een rankingprobleem — Chrome markeert HTTP-sites als "Niet Veilig" in de adresbalk, wat het vertrouwen van gebruikers ondermijnt.

Vereisten voor een goede SSL:

| Vereiste | Waarom | Hoe te Controleren | |----------|--------|---------------------| | Geldig certificaat | Verlopen = browserwaarschuwing = afhaak gebruikers | Controleer vervaldatum | | Volledige keten | Incomplete ketens falen op sommige apparaten | SSL Labs test | | TLS 1.2+ | Oudere versies hebben bekende kwetsbaarheden | SSL Labs test | | Geen SHA-1 | Verouderd, browsers weigeren het | Certificaatdetails | | SAN-dekking | www en non-www moeten beide gedekt zijn | Certificaatdetails | | Auto-vernieuwing | Voorkomt vervaldisaster | Let's Encrypt / providerconfiguratie |

SSL score:

100% = Geldig cert + Volledige keten + TLS 1.3 + Sterke cipher + Auto-vernieuwing
  0% = Verlopen of ontbrekend certificaat

Veel voorkomende SSL-fouten:

  1. Certificaat verloopt zonder waarschuwing — Zet monitoring op (Stap 6) minimaal 30 dagen voor verval
  2. Incomplete certificaatketen — Server moet intermediaire certificaten verzenden, niet alleen de leaf
  3. Mixed content — HTTPS-pagina laadt HTTP-bronnen (afbeeldingen, scripts, stylesheets)
  4. Redirect loops — HTTP → HTTPS → HTTP cycli veroorzaakt door verkeerd geconfigureerde CDN/proxy
  5. Non-www vs www mismatch — Certificaat dekt de een maar niet de ander

Snelle winst: Voer je domein door SSL Labs (ssllabs.com/ssltest). Alles onder een "A" rating heeft actiepunten. De meeste hostingproviders lossen deze met één klik op.

Beveiligingsheaders

Beveiligingsheaders zijn HTTP-responsheaders die browsers instrueren hoe ze zich moeten gedragen bij het laden van je site. Ze voorkomen hele categorieën van aanvallen — en Google's crawlers controleren ze.

De essentiële beveiligingsheaders:

Content-Security-Policy (CSP)

CSP is de krachtigste beveiligingsheader. Het vertelt browsers precies welke middelen (scripts, stijlen, afbeeldingen, lettertypen) zijn toegestaan om op je pagina's te laden.

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://api.example.com; frame-ancestors 'none';

Wat CSP voorkomt:

  • Cross-site scripting (XSS) aanvallen
  • Data-injectie aanvallen
  • Clickjacking (via frame-ancestors)
  • Onbevoegde scriptuitvoering (cryptominers, advertentie-injectors)

CSP implementatiestrategie:

  1. Begin met Content-Security-Policy-Report-Only (log overtredingen zonder te blokkeren)
  2. Monitor rapporten 1-2 weken
  3. Whitelist legitieme bronnen
  4. Schakel over naar handhaving
  5. Voeg report-uri of report-to toe voor voortdurende overtredingslogging

X-Frame-Options

Voorkomt dat je site wordt ingesloten in iframes op andere domeinen (clickjacking bescherming).

X-Frame-Options: DENY

Of als je same-origin framing wilt toestaan:

X-Frame-Options: SAMEORIGIN

X-Content-Type-Options

Voorkomt dat browsers MIME-type sniffing uitvoeren (bestanden interpreteren als andere types dan verklaard).

X-Content-Type-Options: nosniff

Deze oneliner voorkomt aanvallen waarbij een .jpg-bestand verborgen JavaScript bevat dat de browser mogelijk uitvoert.

Referrer-Policy

Regelt hoeveel referentie-informatie wordt verzonden wanneer gebruikers op links van je site klikken.

Referrer-Policy: strict-origin-when-cross-origin

Dit verzendt de volledige URL voor same-origin verzoeken, maar alleen de oorsprong (domein) voor cross-origin verzoeken. Balanceren van analyseen behoeften met privacy.

Permissions-Policy

Regelt welke browserfuncties (camera, microfoon, geolocatie, enz.) op je site kunnen worden gebruikt.

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

Het uitschakelen van functies die je niet gebruikt, voorkomt dat derden ze misbruiken.

Voorbeeld van headerimplementatie (Next.js):

// next.config.js
module.exports = {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        { key: 'X-Content-Type-Options', value: 'nosniff' },
        { key: 'X-Frame-Options', value: 'SAMEORIGIN' },
        { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
        { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
        { key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' },
      ]
    }]
  }
}

Headerimplementatie (Apache .htaccess):

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Headerimplementatie (Nginx):

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Snelle winst: Voeg alle 5 headers hierboven toe aan je serverconfiguratie. Dit kost 5 minuten en verbetert onmiddellijk je beveiliging in elke scan tool.

HSTS Preload

HTTP Strict Transport Security (HSTS) vertelt browsers om altijd HTTPS te gebruiken voor je domein — zelfs voor de eerste aanvraag. Zonder HSTS kan het eerste bezoek aan je site nog steeds HTTP gebruiken (kwetsbaar voor onderschepping) voordat de redirect naar HTTPS plaatsvindt.

HSTS header:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

De drie richtlijnen:

| Richtlijn | Betekenis | |-----------|-----------| | max-age=31536000 | Onthoud dit voor 1 jaar (in seconden) | | includeSubDomains | Ook toepassen op alle subdomeinen | | preload | Vraag opname aan in browser preload lijsten |

HSTS preloadlijst:

De ultieme HSTS-bescherming. Browsers worden geleverd met een ingebouwde lijst van domeinen die altijd HTTPS moeten gebruiken. Je domein indienen bij hstspreload.org betekent:

  • Eerste bezoekers krijgen onmiddellijk HTTPS (geen HTTP → HTTPS redirect)
  • Het is onmogelijk voor aanvallers om verbindingen te downgraden
  • Permanent (moeilijk te verwijderen zodra ingediend)

Vereisten voor HSTS preload:

  1. Geldig HTTPS-certificaat
  2. Redirect alle HTTP naar HTTPS (inclusief subdomeinen)
  3. HSTS-header met max-age >= 31536000
  4. HSTS-header omvat includeSubDomains
  5. HSTS-header omvat preload
  6. Alle subdomeinen moeten HTTPS ondersteunen

Waarschuwing: Dien alleen in voor preload als ALLE subdomeinen HTTPS ondersteunen. De includeSubDomains richtlijn betekent dat elk HTTP-only subdomein ontoegankelijk wordt.

Snelle winst: Als je al HTTPS op alle subdomeinen hebt, voeg de volledige HSTS-header toe en dien in bij hstspreload.org. De verwerking duurt enkele weken, maar de bescherming is permanent.

Kwetsbaarheidsanalyse

Geautomatiseerde kwetsbaarheidsanalyses identificeren bekende beveiligingsproblemen in je stack voordat aanvallers ze kunnen uitbuiten.

Wat kwetsbaarheidsanalyse controleert:

  • Verouderde software: WordPress, plugins, JavaScript-bibliotheken met bekende CVE's
  • Exposed files: .env, .git, wp-config.php, database dumps
  • Informatie lekken: Server versie headers, debugmode, stack traces
  • Standaard inloggegevens: Admin pagina's zonder authenticatie, standaardwachtwoorden
  • Open poorten/diensten: Onnodige diensten blootgesteld aan het internet
  • Injectiepunten: Formulieren zonder CSRF-bescherming, ongevalideerde invoer

Veel voorkomende kwetsbaarheden per platform:

| Platform | Top Kwetsbaarheid | Oplossing | |-----------|-------------------|------------------------| | WordPress | Verouderde plugins | Automatisch updaten + WAF | | Shopify | Derde-partij app machtigingen | Auditen app lijst elk kwartaal | | Next.js | Blootgestelde API-routes | Auth middleware + rate limiting | | Statitishe sites | CDN misconfiguratie | Review cache regels | | Custom | SQL-injectie | Geparameteriseerde queries |

Scanfrequentie:

  • Dagelijks: Geautomatiseerde oppervlakkige scan (SSL, headers, blootgestelde bestanden)
  • Wekelijks: Kwetsbaarheid controle van afhankelijkheden (npm audit, WordPress plugin scanner)
  • Maandelijks: Diepe scan met geauthenticeerde tests
  • Na elke deployment: Regressiecontrole

Snelle winst: Voer npm audit (Node.js) of controleer je CMS-pluginlijst op verouderde componenten. Los kritieke/hoge-severiteit kwesties onmiddellijk op.

Mixed Content

Mixed content doet zich voor wanneer een HTTPS-pagina bronnen (afbeeldingen, scripts, stylesheets, iframes) via HTTP laadt. Dit onderbreekt gedeeltelijk de versleuteling en genereert waarschuwingen van de browser.

Types van mixed content:

| Type | Ernstigheid | Voorbeeld | Browser Gedrag | |---------|-------------|-----------|-------------------------| | Actief | Hoog | HTTP-script, iframe, CSS | Standaard geblokkeerd | | Passief | Middel | HTTP-afbeelding, video, audio | Laadt met waarschuwing |

Actief mixed content wordt geblokkeerd door moderne browsers — wat betekent dat je scripts en stijlen eenvoudigweg niet zullen laden. Passief mixed content laadt, maar toont beveiligingswaarschuwingen.

Mixed content vinden:

  1. Open Chrome DevTools → Console
  2. Zoek naar "Mixed Content" waarschuwingen
  3. Alternatief, scan met een crawler (Screaming Frog, LANGR)

Veel voorkomende bronnen van mixed content:

  • Hardcoded http:// URL's in content (blogposts, productbeschrijvingen)
  • Derde-partij widgets die HTTP-bronnen laden
  • Ingebedde content (oude YouTube embeds, sociale media widgets)
  • CSS background-image met HTTP-URL's
  • Lettertypen geladen via HTTP

Mixed content oplossen:

<!-- Slecht -->
<img src="http://example.com/image.jpg" />

<!-- Goed -->
<img src="https://example.com/image.jpg" />

<!-- Beste (protocol-relatief, past zich aan het pagina-protocol aan) -->
<img src="//example.com/image.jpg" />

Database-oplossing (WordPress):

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://yourdomain.com', 'https://yourdomain.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://yourdomain.com', 'https://yourdomain.com');

Snelle winst: Open je homepage in Chrome, druk op F12, controleer de Console-tab op mixed content-waarschuwingen. Los alles op dat verschijnt — deze zijn direct zichtbaar voor Google.

Risico's van Derde-Partij Scripts

Elk extern script dat je laadt, is een potentiële beveiligings- (en prestatie) aansprakelijkheid. Derde-partij scripts kunnen:

  • Gecompromitteerd raken (aanvallen op de toeleveringsketen)
  • Je gebruikers zonder toestemming volgen (GDPR-schending)
  • Je site vertragen (render-blocking, netwerklatentie)
  • Functionaliteit breken (versie-updates, uitval)
  • Ongewenste content injecteren (advertentiescripts die verkeerd zijn)

Audit je derde-partij scripts:

| Script | Noodzakelijk? | Risiconiveau | Alternatief | |-------------------------|---------------|--------------|-------------------------| | Google Analytics | Vaak wel | Laag | Server-side tracking | | Chat widgets | Misschien | Middel | Zelf-gehoste oplossingen | | Sociale deelknoppen | Zelden | Middel | Statische deel-links | | A/B-testen | Soms | Hoog | Server-side testen | | Retargeting pixels | Zakelijke beslissing | Hoog | Eerste-partij data | | Font CDNs | Handig | Laag | Zelf-gehoste lettertypen |

Risicovermindering voor essentiële derde-partij scripts:

  1. Subresource Integrity (SRI): Hash-verificatie voorkomt dat gewijzigde scripts laden
<script src="https://cdn.example.com/lib.js"
        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxAE+sO0..."
        crossorigin="anonymous"></script>
  1. CSP-beperkingen: Sta alleen scripts van bekende domeinen toe
  2. Sandboxed iframes: Isoleren van derde-partij widgets
  3. Regelmatige audits: Kwartaaloverzicht van alle externe bronnen
  4. Monitoring: Waarschuw bij nieuwe externe domeinen die in je pagina's verschijnen

Snelle winst: Maak een lijst van elke