Kas slepiasi už tų skaičių?
Kai naršyklė kreipiasi į serverį ir gauna atsakymą su kodu 301 ar 302, įvyksta maža interneto magija – jūsų naršyklė automatiškai nukreipiama kitur. Bet kol tai atrodo paprasta, už šių dviejų skaičių slypi nemažai niuansų, kuriuos verta suprasti kiekvienam, kas dirba su web projektais.
Pradėkime nuo pagrindų. HTTP statuso kodai 301 ir 302 priklauso 3xx kategorijai, kuri reiškia peradresavimą. Pagrindinis skirtumas tarp jų – 301 reiškia nuolatinį (permanent) peradresavimą, o 302 – laikiną (temporary). Skamba paprasta, bet praktikoje šis skirtumas turi rimtų pasekmių tiek SEO, tiek techninėje pusėje.
Kai serveris grąžina 301 atsakymą, jis iš esmės sako: „Šis resursas visam laikui persikėlė į naują vietą, atnaujink savo žymes ir daugiau čia nebegrįžk”. Naršyklės ir paieškos robotai tai supranta kaip signalą atnaujinti savo įrašus. Google, pavyzdžiui, perduoda didžiąją dalį SEO vertės (link juice) iš senos URL į naują.
302 peradresavimas veikia kitaip – tai tarsi laikinas kelio ženklas: „Šiuo metu eik šituo keliu, bet originalus adresas vis dar galioja”. Paieškos robotai čia elgiasi atsargiau ir paprastai nesikeis originalaus URL indeksavimo.
Kada naudoti 301 ir kada 302
Teorija teorija, bet praktikoje kaip nuspręsti? Iš patirties galiu pasakyti, kad 301 peradresavimą reikėtų naudoti, kai:
– Perkeliate svetainę į naują domeną ir senasis nebeveiks
– Keičiate URL struktūrą visam laikui
– Konsoliduojate kelis puslapius į vieną
– Pašalinate puslapį ir nukreipiate į panašų turinį
– Pereinat nuo HTTP prie HTTPS (taip, tai irgi nuolatinis pokytis)
Pavyzdžiui, jei jūsų įmonė pakeitė pavadinimą ir persikėlė iš senosios-imones.lt į naujoji-imone.lt, tai klasikinis 301 scenarijus. Čia jokių abejonių neturėtų būti.
302 peradresavimą naudokite, kai:
– Atliekate A/B testus
– Puslapis laikinai neprieinamas dėl priežiūros
– Nukreipiate vartotojus pagal geolokaciją ar kalbą
– Vykdote laikiną marketingo kampaniją
– Testuojate naują dizainą ar funkcionalumą
Klasikinis pavyzdys – jūsų e-parduotuvėje išparduodamas produktas, ir laikinai nukreipiate į panašų. Kai prekė vėl atsiras sandėlyje, originalus URL vėl veiks normaliai.
Implementavimo būdai ir skirtumai
Gerai, supratome koncepciją, bet kaip tai įgyvendinti? Yra keletas būdų, ir kiekvienas turi savo vietą.
Apache .htaccess failas – tai turbūt populiariausias būdas. Štai kaip atrodo paprasčiausias 301 peradresavimas:
Redirect 301 /senas-puslapis.html https://jusu-svetaine.lt/naujas-puslapis.html
Arba naudojant mod_rewrite (galingesnė opcija):
RewriteEngine On
RewriteRule ^senas-puslapis\.html$ /naujas-puslapis.html [R=301,L]
302 peradresavimui tiesiog pakeiskite 301 į 302. Paprasta, ar ne?
Nginx konfigūracijoje tai atrodo šiek tiek kitaip:
location /senas-puslapis.html {
return 301 https://jusu-svetaine.lt/naujas-puslapis.html;
}
Arba naudojant rewrite direktyvą:
rewrite ^/senas-puslapis\.html$ /naujas-puslapis.html permanent;
„permanent” čia reiškia 301, o „redirect” reikštų 302.
PHP lygmenyje galite kontroliuoti peradresavimus programiškai:
// 301 peradresavimas
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://jusu-svetaine.lt/naujas-puslapis.html");
exit();
// 302 peradresavimas
header("Location: https://jusu-svetaine.lt/laikinas-puslapis.html");
exit();
Pastaba: PHP pagal nutylėjimą siunčia 302, todėl 301 reikia nurodyti aiškiai.
SEO pasekmės ir link equity
Čia prasideda įdomiausia dalis, ypač tiems, kam rūpi organinis srautas. Google oficialiai teigia, kad 301 peradresavimai perduoda beveik 100% SEO vertės. Praktikoje matau, kad tai tikrai veikia, bet yra niuansų.
Pirma, peradresavimų grandinės – tai blogai. Jei turite URL A → URL B → URL C, prarandate ir greičio, ir SEO vertės. Google rekomenduoja maksimaliai 3-5 peradresavimus grandinėje, bet iš tiesų geriausia – vienas tiesus peradresavimas.
Antra, 302 peradresavimai SEO požiūriu yra rizikingesni. Jei 302 išlieka per ilgai (keli mėnesiai ar ilgiau), Google gali pradėti elgtis nenuspėjamai – kartais indeksuoja naują URL, kartais seną. Mačiau projektų, kur tai sukėlė nemažai painiavos.
Trečia, peradresavimų greitis svarbus. Kiekvienas papildomas peradresavimas prideda latency. Jei jūsų puslapis pirmiausia peradresuoja iš non-www į www, paskui iš HTTP į HTTPS, o tada dar į galutinį URL – tai jau trys papildomi round trips. Vartotojas galbūt to ir nepastebės, bet Google tai įvertina.
Dar vienas dalykas – wildcard peradresavimai. Kai perkeliate visą domeną, galite nustatyti, kad visi seni URL automatiškai atitiktų naujus:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^senas-domenas\.lt$ [NC]
RewriteRule ^(.*)$ https://naujas-domenas.lt/$1 [R=301,L]
Tai išlaiko URL struktūrą ir perduoda SEO vertę kiekvienam puslapiui atskirai.
Klaidos, kurias mačiau tūkstančius kartų
Per darbo metus esu matęs įvairiausių peradresavimų katastrofų. Štai keletas klasikų, kurių tikrai verta vengti.
301 naudojimas laikiniems dalykams. Kartą konsultavau e-parduotuvę, kuri naudojo 301 peradresavimus sezoniniams produktams. Kai sezonas baigdavosi, produkto puslapis peradresuodavo į kategoriją. Kitą sezoną produktas grįždavo, bet Google jau buvo „pamiršęs” originalų URL. Praradimas SEO vertės buvo skausmingas.
Peradresavimas į nerelevantišką turinį. Jei šalinate puslapį apie „Python programavimą pradedantiesiems” ir peradresuojate į pagrindinį puslapį ar, dar blogiau, į visai kitą temą – tai blogiau nei 404 klaida. Geriau peradresuoti į panašų turinį arba grąžinti 410 (Gone) statusą.
Meta refresh naudojimas vietoj tikrų peradresavimų. Kai kas vis dar naudoja:
<meta http-equiv="refresh" content="0;url=https://naujas-url.lt">
Tai ne serverio lygmens peradresavimas ir SEO požiūriu gerokai silpnesnis. Google tai supranta, bet tai nėra geriausias sprendimas.
JavaScript peradresavimai – panaši istorija:
window.location.href = "https://naujas-url.lt";
Tai veikia vartotojams, bet paieškos robotai gali turėti problemų, ypač jei JS vykdomas lėtai arba yra klaida.
Testavimas ir diagnostika
Kaip įsitikinti, kad jūsų peradresavimai veikia teisingai? Yra keletas įrankių ir metodų.
cURL komanda – tai mano asmeninis favoritas greitam patikrinimui:
curl -I https://jusu-svetaine.lt/senas-puslapis.html
Atsakyme turėtumėte matyti:
HTTP/1.1 301 Moved Permanently
Location: https://jusu-svetaine.lt/naujas-puslapis.html
Jei norite sekti visą peradresavimų grandinę:
curl -L -I https://jusu-svetaine.lt/senas-puslapis.html
Browser Developer Tools – atidarykite Network skirtuką ir pažiūrėkite į HTTP status kodus. Chrome DevTools puikiai parodo visą peradresavimų grandinę.
Online įrankiai kaip redirect-checker.org ar httpstatus.io leidžia greitai patikrinti peradresavimus neatidarant terminalo. Naudinga, kai reikia parodyti rezultatus klientui ar kolegai, kuris nemėgsta komandinės eilutės.
Svarbu testuoti ne tik pagrindinį URL, bet ir:
– Su ir be trailing slash (/)
– Su www ir be www
– HTTP ir HTTPS versijas
– Mobilią versiją (jei skiriasi)
– Skirtingus query parametrus
Kartą radau svetainę, kur peradresavimai veikė puikiai, išskyrus URL su query parametrais – tie tiesiog grąžindavo 404. Problema buvo .htaccess konfigūracijoje, kur trūko [QSA] (Query String Append) flag’o.
Našumo optimizavimas
Peradresavimai prideda latency, tai faktas. Bet galima minimizuoti poveikį.
DNS lygmens peradresavimai – kai perkeliate visą domeną, galite nustatyti DNS lygmens peradresavimą. Kai kurie DNS provideriai (Cloudflare, AWS Route 53) palaiko tai. Pranašumas – greičiau nei serverio lygmens peradresavimas.
CDN peradresavimai – jei naudojate CDN (Cloudflare, Fastly, AWS CloudFront), galite konfigūruoti peradresavimus edge lygmenyje. Tai reiškia, kad peradresavimas vyksta arčiausiai vartotojo, ne jūsų origin serveryje.
Cloudflare pavyzdys naudojant Page Rules:
URL: senas-domenas.lt/*
Forwarding URL: 301 - https://naujas-domenas.lt/$1
Preload ir DNS prefetch – jei žinote, kad vartotojas bus peradresuotas, galite pridėti:
<link rel="dns-prefetch" href="//naujas-domenas.lt">
<link rel="preconnect" href="https://naujas-domenas.lt">
Tai pagreitina DNS lookup ir TCP handshake naujam domenui.
Specialūs atvejai ir edge cases
Yra situacijų, kur standartiniai 301/302 neužtenka arba nėra tinkami.
307 ir 308 statusai – tai naujesni peradresavimo kodai. 307 yra kaip 302, bet garantuoja, kad HTTP metodas (POST, PUT) nebus pakeistas į GET. 308 – tai 301 atitikmuo su ta pačia garantija.
Tai svarbu API kontekste. Jei turite POST request į /api/v1/users ir norite peradresuoti į /api/v2/users, naudokite 307 arba 308, kad išlaikytumėte POST metodą ir request body.
location /api/v1/users {
return 308 https://jusu-api.lt/api/v2/users;
}
Canonical tags vs 301 – kartais geriau naudoti canonical tag vietoj peradresavimo. Pavyzdžiui, jei turite produkto puslapį su skirtingais query parametrais (filtrai, rikiavimas), geriau:
<link rel="canonical" href="https://jusu-svetaine.lt/produktas" />
Nei peradresuoti visus variantus į vieną URL.
Hreflang ir peradresavimai – jei turite tarptautinę svetainę, būkite atsargūs su geolokacija paremtais peradresavimais. Google robotai dažniausiai kreipiasi iš JAV, todėl jei automatiškai peradresuojate į en-US versiją, kitos kalbos gali būti neindeksuojamos.
Sprendimas – nenaudoti peradresavimų geolokacijai, o naudoti hreflang tags ir leisti vartotojui pasirinkti kalbą/regioną.
Kai peradresavimai tampa architektūros dalimi
Didesnėse sistemose peradresavimų valdymas tampa sudėtingesnis. Čia keletas patarimų, kaip tai organizuoti.
Centralizuotas peradresavimų valdymas – vietoj peradresavimų išmėtymo po įvairius konfigūracijos failus, sukurkite vieną vietą. Tai gali būti:
– Atskiras .htaccess failas tik peradresavimams
– Duomenų bazės lentelė su peradresavimų taisyklėmis
– YAML ar JSON failas, kurį nuskaito aplikacija
Pavyzdžiui, Laravel framework’e galite turėti:
// routes/redirects.php
return [
'/senas-url-1' => ['/naujas-url-1', 301],
'/senas-url-2' => ['/naujas-url-2', 301],
'/laikinas' => ['/kitas', 302],
];
Ir middleware, kuris tai apdoroja.
Peradresavimų logavimas – svarbu žinoti, kas ir kada buvo peradresuota. Tai padeda debuginti problemas ir analizuoti vartotojų elgesį. Nginx pavyzdys:
log_format redirect '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'redirect_to: $upstream_http_location';
Automatinis senų peradresavimų valymas – jei peradresavimas veikia 2-3 metus ir Google jau seniai perkėlė visą vertę, galbūt laikas jį pašalinti? Tai sumažina konfigūracijos sudėtingumą ir šiek tiek pagerina našumą.
Bet būkite atsargūs – jei URL vis dar gauna tiesioginį srautą (iš social media, email kampanijų, išorinių nuorodų), peradresavimas vis dar reikalingas.
Kas toliau – praktiniai patarimai ir apibendrinimas
Peradresavimai atrodo kaip paprasta web technologija, bet kaip matėte, čia yra daug niuansų. Štai keletas praktinių patarimų, kuriuos rekomenduočiau įsidėmėti.
Visada dokumentuokite savo peradresavimus. Sukurkite paprastą Excel ar Google Sheets lentelę su stulpeliais: senas URL, naujas URL, tipas (301/302), data, priežastis. Po metų padėkosit sau už tai.
Prieš didelius pokyčius (domeno keitimas, URL struktūros pertvarkymas) pasidarykite visų esamų URL sąrašą ir suplanuokite peradresavimus iš anksto. Naudokite screaming frog ar panašų įrankį, kad ištrauktumėte visus URL.
Testuokite staging aplinkoje. Peradresavimų klaidos production’e gali būti labai skausmingos, ypač jei tai e-commerce svetainė. Patikrinkite ne tik, kad peradresavimas veikia, bet ir kad išlaiko sesijas, krepšelio turinį, UTM parametrus.
Stebėkite Google Search Console po didelių peradresavimų kampanijų. Coverage report’as parodys, ar Google randa klaidas, ar teisingai indeksuoja naujus URL. Tai gali užtrukti kelias savaites, būkite kantrūs.
Nepanikuokite, jei SEO metrikos trumpam krenta po didelių pokyčių. Google reikia laiko perskaičiuoti viską. Paprastai per 2-4 savaites viskas stabilizuojasi, jei peradresavimai nustatyti teisingai.
Ir paskutinis dalykas – kartais geriausia strategija yra išvis nevykdyti peradresavimo. Jei URL struktūra veikia gerai, nelaužykite jos tik dėl „gražesnių” URL. Kiekvienas peradresavimas – tai kompromisas tarp estetikos ir našumo. Kartais geriau palikti kaip yra.
Peradresavimai – tai įrankis, ne tikslas. Naudokite juos protingai, testuokite kruopščiai, ir jūsų vartotojai bei paieškos robotai bus laimingi. O jei kažkas nepavyksta – visada galite grįžti prie šio straipsnio ir patikrinti, ar nepraleisdote kurio nors niuanso.
