Dobrze wszystkim znane strony 404 wykorzystywane są do poinformowania użytkownika, że dany zasób nie istnieje. W tym krótkim poście przyglądnę się szczegółowo, jak powinna wyglądać jej poprawna implementacja.

Strona 404 powinna jednocześnie służyć:

  • robotom wyszukiwarek i SEO – aby błędna podstrona nie została zaindeksowana w wynikach wyszukiwania,
  • użytkownikom – aby dać użytkownikowi jasny komunikat,
  • zwiększeniem konwersji – na stronę 404 warto poświęcić nieco czasu – mimo braku treści której użytkownik się spodziewał powinniśmy postarać się przekonać go do pozostania na naszej stronie.

Wymagania które powinna spełniać strona 404 dla robotów wyszukiwarek:

  • zwracać HTTP status code 404 (not found).

Wymagania które powinna spełniać strona 404 dla użytkowników:

  • jasna i precyzyjna informacja o tym, że odwiedzona strona nie istnieje,
  • pomoc użytkownikowi w odnalezieniu tego, czego potrzebuje.

Wymagania które powinna spełniać strona 404 dla zwiększenia konwersji:

  • podpięte narzędzie analityczne, aby móc zlokalizować błędne adresy i źródła ich odwiedzin,
  • zatrzymanie użytkownika na stronie:
    • umożliwiając wyszukanie oczekiwanego zasobu,
    • zasugerowanie treści biorąc pod uwagę wcześniej odwiedzone podstrony lub sugestia będąca próbą zgadnięcia zasobu na podstawie błędnego adresu url,
    • pokazanie odnośników do najpopularniejszych, najnowszych treści.

Rozwiązania możliwe do zastosowania w przypadku stron typu SPA:

  • przekierowanie na poprzednio przygotowaną statyczną stronę 404 serwowaną przez serwer,
  • dynamiczne dołączanie noindex metatag za pomocą JS,
  • zaserwowanie botowi wyszukiwarki strony 404 z noindex metatag za pomocą SSR, natomiast zwykłemu użytkownikowi wyrenderowanie standardowej aplikacji klienckiej.

Przykład dynamicznego dołączenia i usunięcia metatagu noindex w Angularze za pomocą serwisu Meta:

this.metaService.addTag({ name: 'googlebot', content: 'noindex' });
this.metaService.addTag({ name: 'robots', content: 'noindex' });

this.metaService.removeTag('name="googlebot"');
this.metaService.removeTag('name="robots"');

Wybór właściwej implementacji zależy od konkretnego projektu.