Přejít na hlavní obsah

Návody / HTTP stavové kódy vysvětlené

301 vs 302: trvalá a dočasná přesměrování

301 říká, že se prostředek přesunul natrvalo a nová URL by měla všude nahradit tu starou; 302 říká, že je přesun dočasný a původní URL je pořád ta skutečná. Vyhledávače podle tohoto rozdílu jednají, a proto vás špatně zvolený kód stojí pozice.

Co oba kódy klientovi říkají

Oba kódy pošlou klienta na adresu v hlavičce Location, a návštěvníkovi vypadají stejně. Rozdíl je v tom, co s touto informací udělá všechno ostatní. 301 vyzývá klienty a roboty, aby si aktualizovali záznamy: nahradili záložku, přepsali odkaz, indexovali cíl místo zdroje. 302 je žádá, aby dál používali původní URL a tentokrát si jen udělali odbočku. Prohlížeče mohou 301 cachovat a server se na ni přestat ptát úplně; 302 se ve výchozím nastavení necachuje, pokud odpověď neříká jinak.

Kdy použít který

  • Použijte 301 pro změnu domény, migraci z HTTP na HTTPS, kanonizaci z non-www na www, trvalou restrukturalizaci URL, sloučenou nebo přejmenovanou stránku, nebo zrušenou produktovou stránku mířící na svou nejbližší náhradu.
  • Použijte 302 pro stránku údržby, A/B test, geografickou nebo jazykovou volbu vstupní stránky, kterou možná změníte, krátkodobou kampaňovou URL, nebo dočasný cíl "vraťte se později".

Nikdy nepoužívejte 301 pro něco, co plánujete vrátit zpět. Protože si ji klienti cachují, vracející se návštěvníci mohou nadále přistávat na dočasném cíli ještě dlouho poté, co pravidlo smažete, a do jejich cache se nijak nedostanete. Opačná chyba: necháte 302 na trvalém přesunu, stará URL zůstane v indexu, ta nová s ní soupeří, a signály zůstávají rozdělené.

Dopady na SEO

Dokumentace Google uvádí, že trvalé přesměrování je signál, že by se cíl přesměrování měl považovat za canonical URL, zatímco dočasné přesměrování takový signál nedává, takže si původní URL udrží své místo v indexu. V praxi to znamená:

  • 301 konsoliduje hodnotu odkazů na cíli a časem starou URL v indexu nahradí novou.
  • 302 obecně nechá zdrojovou URL v indexu. Vyhledávače se sice snaží záměr interpretovat, takže dlouho trvající 302 může být nakonec vyhodnoceno jako trvalé, ale neměli byste spoléhat na to, že se to uhodne správně.
  • Řetězce přesměrování zeslabují přínos a zpomalují procházení. Staré URL směrujte přímo na konečný cíl.
  • Přesměrování mnoha zrušených stránek na domovskou stránku bývá vyhodnoceno jako měkká 404, ne jako přesun. Přesměrujte na nejbližší ekvivalentní stránku, nebo vraťte 410, pokud žádná ekvivalentní neexistuje.
  • Ať zvolíte cokoli, udržujte to v souladu se svými canonical tagy a sitemapou. Protichůdné signály jsou horší než mírně neoptimální volba.

307 a 308: verze zachovávající metodu

Původní definice 301 a 302 byly ohledně HTTP metody nejednoznačné a klienti se ustálili na chování, které standard dnes popisuje jako historické: když klient následuje 301 nebo 302 po POST, mnoho klientů metodu změní na GET a zahodí tělo. Pro obyčejnou stránku je to neškodné. Pro endpoint formuláře nebo API to požadavek zničí a nic se nenahlásí.

307 Temporary Redirect má stejný význam jako 302 a 308 Permanent Redirect má stejný význam jako 301, s jedním požadavkem navíc pro oba: metoda i tělo musí zůstat zachované. Takže pro URL, které přijímají jen GET požadavky, jsou 301 a 302 v pořádku a jsou tím, co očekává většina nástrojů. Pro cokoli, co přijímá POST, PUT, PATCH nebo DELETE, použijte 308 pro trvalý přesun a 307 pro dočasný. Pokud konkrétně chcete, aby po POST následoval GET na jiné URL, na to je 303 See Other.

Jak zkontrolovat, jaký kód URL vrací

  1. Přečtěte si stavový řádek a cíl, aniž byste přesměrování následovali:
    curl -sI https://example.com/old-page | grep -Ei "^(HTTP|location|cache-control)"
    Stavový řádek ukáže 301, 302, 307 nebo 308, a Location ukáže, kam míří.
  2. Projděte celý řetězec a spočítejte skoky, abyste viděli, jestli se z jednoho přesměrování nestaly tři:
    curl -sIL -o /dev/null -w "%{num_redirects} hops, final %{http_code}, %{url_effective}\n" https://example.com/old-page
  3. Otestujte pomocí POST, pokud ho endpoint přijímá. Pokud požadavek dorazí na cíl jako GET bez těla, přepněte pravidlo na 307 nebo 308.
  4. Změňte kód tam, kde se generuje. Může to být aplikace, konfigurace webového serveru, pravidlo .htaccess, nebo CDN. Pokud přesměrovávají obě vrstvy, vyhrává ta nejvzdálenější a vnitřní pravidlo je neviditelné.
  5. Ověřte se studenou cache. Prohlížeč, který si 301 už zacachoval, ho dál poslouchá, takže si to potvrďte pomocí curl nebo anonymního okna, než usoudíte, že se změna neprojevila.
  6. Po trvalém přesunu přesměrování ponechte na místě. Jeho pozdější odstranění nechá na holičkách každý odkaz a záložku, které pořád míří na starou URL.

Sledování přesměrování po jeho nastavení

Přesměrování, které změní kód, začne se smyčkovat, nebo ztratí TLS certifikát, nechá zdrojovou URL dál odpovídat, takže nic nevypadá rozbité, dokud nespadne návštěvnost. Externí kontroly, které zaznamenávají přesný stavový kód a sledují celý řetězec, to odhalí při dalším běhu, a spuštění z mnoha sítí odliší globální změnu pravidla od regionálního problému CDN. HostTracker monitoruje weby od roku 2004 a spouští kontroly z více než 300 kontrolních bodů ve 158 městech. Zjistěte, co URL vrací právě teď, pomocí nástroje HTTP kontroly, a přečtěte si celý návod na rodinu přesměrování 3xx pro kódy na obou stranách těchto dvou.

Zkontrolovat hned

Spusťte bezplatnou kontrolu na svém webu - bez registrace.

HTTP check

Sledovat trvale

Dostanete upozornění ve chvíli, kdy něco přestane fungovat: HostTracker kontroluje z více než 300 lokalit a upozorní vás e-mailem, SMS, přes Slack, Telegram a další.

Funkce HostTracker

Více v této sekci: HTTP stavové kódy vysvětlené