Wcag uitgelegd

Single-page app die de titel niet bijwerkt

Single-page app die de titel niet bijwerkt — WCAG 2.4.2 Paginatitel (post 5/7)

Je navigeert van de homepage naar de contactpagina. De content verandert. De URL verandert. Het tabblad? Staat nog steeds “Home - Webshop.”

In een single-page applicatie (React, Vue, Angular, Next.js) laadt de browser geen nieuwe pagina bij navigatie. De content wordt dynamisch vervangen. Maar het <title>-element wordt niet automatisch bijgewerkt — dat moet de developer handmatig doen.

Waarom is dit een probleem?

  • Een schermlezer kondigt de nieuwe pagina niet aan. De gebruiker weet niet of de navigatie gelukt is.
  • Bij meerdere tabbladen staat overal dezelfde titel.
  • De browsergeschiedenis (terug-knop) toont dezelfde titel voor elke “pagina.”
// Niet doen: titel vergeten bij routewijziging
function navigeerNaar(pagina) {
  renderContent(pagina);
  // document.title blijft ongewijzigd
}

// Wel doen: titel meteen bijwerken
function navigeerNaar(pagina) {
  renderContent(pagina);
  document.title = pagina.titel + " - Webshop";
}

In React:

useEffect(() => {
  document.title = `${paginaTitel} - Webshop`;
}, [paginaTitel]);

Tip: voeg dit toe aan je router, niet aan elke individuele pagina. Dan vergeet je het niet bij een nieuwe pagina.

Test: klik door je SPA en kijk na elke navigatie naar het tabblad. Verandert de titel?

Related Posts

Sitenaam vóór de paginanaam

Sitenaam vóór de paginanaam

Drie tabbladen open: “Gemeente Utrecht - Paspoort aa…” “Gemeente Utrecht - Rijbewijs ve…” “Gemeente Utrecht - Verhuizing d…”

Paginatitel ontbreekt

Paginatitel ontbreekt

Je opent een pagina. De schermlezer zegt: “https colon slash slash w-w-w dot example dot com slash pagina dash 3-b dot html.”

Navigatiemenu verdwijnt bij inzoomen

Navigatiemenu verdwijnt bij inzoomen

Home. Over ons. Diensten. Projecten. Contact. Vijf links op een rij. Op een breed scherm prima. Bij 400% zoom? Dan past “Contact” niet meer. Die link valt buiten het scherm. Zonder scrollbar. Zonder hamburgermenu.