Część 9 z 22

Przekierowania, 404 i kody odpowiedzi

Wyszukiwarki czytają kody HTTP jak instrukcje. Złe kody wyciekają moc linków albo trzymają martwe strony w indeksie.

Trwałe przenosiny — w next.config.mjs (zwraca 308, traktowany przez Google jak 301):

// next.config.mjs
export default {
  async redirects() {
    return [
      {
        source: "/old-blog/:slug",
        destination: "/blog/:slug",
        permanent: true,
      },
    ];
  },
};

Przekierowania w aplikacji — wybierz funkcję zgodną z semantyką:

import { redirect, permanentRedirect, notFound } from "next/navigation";

// 307 — tymczasowe (bramki logowania, routing A/B)
redirect("/login");

// 308 — trwałe (slug się zmienił, stary URL ma przekazać moc)
permanentRedirect(`/blog/${post.newSlug}`);

// Prawdziwy 404 z twoim UI z not-found.tsx
if (!post) notFound();

Zasady czystego indeksu:

  • Zero łańcuchów przekierowań: stary → starszy → aktualny marnuje crawl budget i rozmywa sygnały. Zawsze przekierowuj prosto na końcowy URL.
  • Brakująca treść zwraca 404, a nie stronę „nic nie znaleziono" z kodem 200 (soft 404 — Google flaguje je w Search Console).
  • Wybierz jedną formę URL i egzekwuj ją: z ukośnikiem końcowym lub bez (trailingSlash w configu), małe litery, bez duplikatów www/bez-www (przekierowanie na poziomie edge/DNS).
  • Zmieniasz slug — dodaj przekierowanie w tym samym PR. Wsteczna archeologia przekierowań nie zdarza się nigdy.

Zmieniasz platformę? Pełny playbook — inwentarz, mapa przekierowań, kontrola parytetu i monitoring startu — w temacie Migracja SEO.

Checklista:

  • Wszystkie stare adresy przekierowują 308/301 prosto do miejsc docelowych (bez łańcuchów)
  • Własny not-found.tsx, który faktycznie zwraca 404
  • Jedna kanoniczna forma URL (ukośnik, wielkość liter, host) w całej witrynie
  • Zmiana sluga zawsze jedzie razem ze swoim przekierowaniem

Wolisz, żeby ktoś zrobił to za Ciebie?

Audytuję i naprawiam techniczne SEO na stronach Next.js — indeksowanie, szybkość, hreflang i widoczność w AI.

Usługa technicznego SEO