Htaccess polopaticky – riešenie problému s duplicitou

Tibor Peták, 11. November 2007

Canonical issue (kanonický problém) má web v prípade, keď má na viacerých URL adresách totožný obsah (pomenovanie pochádza od slova canonicalization, ktorým sa v Google označuje problém výberu z niekoľkých URL adries s rovnakým obsahom). Najčastejší prípad je ten, keď sú prístupné obe: non-www verzia (http://seochat.sk) a aj www verzia stránok (http://www.seochat.sk). Technicky sa totiž jedná o dve rôzne URL adresy a ako také môžu mať rôzny obsah. Lenže vo väčšine prípadov sú to dokonalé duplikáty a tak spolu so súborom /index.php (index.html, index.asp, default.php, apod.) môžu vytvoriť 4 kópie rovnakej stránky:

http://seochat.sk

http://www.seochat.sk

http://seochat.sk/index.php

http://www.seochat.sk/index.php

Sám o sebe by rovnaký obsah na rôznych URL adresách ešte problém nebol. Problém nastáva až vtedy, ak sa niekto na váš web rozhodne odkazovať vo forme inej ako všetci ostatní (napr. bez www). Vtedy si totiž Google musí vybrať, čo bude zobrazovať ako hlavnú stránku vo výsledkoch vyhľadávania. V tomto je zväčša veľmi dobrý, pretože má dobré vodítko – množstvo a kvalitu spätných odkazov. Čo ale v prípade, keď pólka odkazov vedie na www a pólka na non-www verziu? Má to o niečo ťažšie…

Poviete si, že veď je to problém Google-u a vám je to jedno. No nemalo by… V prípade, že si Google vyberie za vašu hlavnú stránku verziu s www, tak odkazy, ktoré vedú na non-www verziu sa vám nezapočítavajú do rankingu (alebo aspoň nie v takej miere, ako keď to správne presmerujete). Touto nečinnosťou sa pripravujete o (niekedy aj veľký) odkazový potenciál.

Riešenie kanonického problému spočíva v presmerovaní pomocou 301 permanent redirect. Pre Apache servery je ideálne riešenie súbor .htaccess, ktorý umiestnite do koreňového adresára. Pre tých, ktorí netušia ako vytvoriť súbor .htaccess -> Súbor .htaccess vytvoríte trebárs aj v Poznámkovom bloku Windows, kde dáte „Uložiť ako“ a ručne vpíšete názov súboru .htaccess (áno, s bodkou na začiatku).

Presmerovanie non-www na www verziu pomocou .htaccess

Presmerovanie http://seochat.sk/hocaka-stranka.html na http://www.seochat.sk/hocaka-stranka.html sa nastaví v .htaccess nasledovne:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^seochat.sk
RewriteRule (.*) http://www.seochat.sk/$1 [R=301,L]

Ak chcete používať verziu bez www ako svoju hlavnú stránku, vložte tam toto:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.seochat\.sk$
RewriteRule (.*) http://seochat.sk/$1 [R=301,L]

Presmerovanie index.php

Niektorí webmasteri vám môžu odkazovať na index.php, preto je dobré aj toto presmerovať na vašu zvolenú hlavnú stránku (www alebo non-www verzia). Aby ste to dosiahli, vložte do .htaccess:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.seochat.sk/ [R=301,L]

Tento príkaz vám presmeruje http://www.seochat.sk/index.php na http://www.seochat.sk. Úprava potrebná k presmerovaniu index.php na non-www verziu je už snáď zrejmá.

Čo sa dá ešte urobiť?

Ak používate Google webmaster tools, tak aj tam si máte možnosť vybrať, ktorú verziu stránok preferujete (Login -> Tools -> Set preferred domain). Po fixácii, ktorú som uviedol vyššie, to však nemá žiadny význam. Možno tak pre dobrý pocit… :)

Čo je však omnoho dôležitejšie, je to, aby ste si sami neodkazovali na niekoľko verzií stránok. Veľakrát sa stáva, že odkaz “Home” alebo “Hlavná stránka” v navbare/menu vedie na index.php alebo na verziu bez www (pričom preferovaná hlavná stránka je s www prefix-om). Preto neodkazujte na hlavnú stránku štýlom: <a href=”index.php”>Home</a> ale namiesto toho: <a href=”/”>Home</a>.


Podobné články / mohlo by vás zaujať:

29 komentárov k “Htaccess polopaticky – riešenie problému s duplicitou”

1. gondo píše:
November 11th, 2007 at 11:21 pm

beru sa ako rozdielne stranky aj
http://www.mojastranka.sk
http://www.mojastranka.sk/
?
na nejakom zahranicnom seo blogu (bohuzial link nemam) som nasiel ludi co s tym mali problem, rsp robili z toho problem.

2. tybi-admin píše:
November 12th, 2007 at 12:00 am

Nie. To, čo si napísal, duplicita nie je. Problém však môže nastať pri:
http://www.mojastranka.sk/konkretna-stranka
http://www.mojastranka.sk/konkretna-stranka/
V prvom prípade sa totiž jedná o súbor s názvom “konkretna-stranka” umiestnenom v koreňovom adresári a v druhom prípade ide o podadresár s názvom “konkretna-stranka”, z ktorého sa zobrazuje súbor index.php alebo niečo podobné.

3. gondo píše:
November 12th, 2007 at 12:16 am

hej toto mi je jasne, ale ide mi skor o to, ci google rozlisuje stranky so znakom “/” na konci od rovnakych bez tohto znaku.
priklad typu
http://www.mojastranka.sk/konkretna-stranka
http://www.mojastranka.sk/konkretna-stranka/
moze hadzat rovnaku stranku (ako tomu je na par mojich projektoch) ked je cela url smerovana na index v korenovom adresari (a az ten urci aky obsah sa nasledne zobrazi) pomocov .htaccess
preto by som rad vedel ci mam osetrovat to “/” na konci a ked ano, ci je pesie ho tam nechavat alebo nie.

inak zisla by sa nejaka notifikacia ze niekto odpovedal na moj koment lebo som zabudol kde som toto cital a uz par minut som hladal ci mi niekto odpisal :)

4. tybi-admin píše:
November 12th, 2007 at 12:30 am

Už som ti na to odpovedal… Jedno je adresár a druhé je súbor. Z toho plynie, že môžu mať rôzny obsah a z toho plynie, že ich Google považuje za rôzne URL adresy. Takže áno, mal by si to ošetriť.

Ktoré je lepšie – s alebo bez lomeno “/” na konci? Z pohľadu vyhľadávačov v tom nie je žiadny rozdiel.

5. head píše:
November 20th, 2007 at 10:58 am

tybi, ano mas pravdu, ze jedno je subor a druhe adresar, ale isto uznas, ze obidva naraz tam byt nemozu (aj subor aj adresar) a myslim si ze google bot nie je taky sprosty, ze by vtom robil rozdiel a berie do uvahy to, ze tam bude naraz aj subor, aj adresar (kedze to nieje mozne)

6. tybi-admin píše:
November 20th, 2007 at 11:31 am

Head, neuznám… pretože môžu tam byť obidva naraz. Čo ti bráni v tom, aby si vytvoril súbor v koreňovom adresári “priklad” a zároveň mal adresár “priklad” a v ňom index.php?

Je úplne správne, že to Google berie ako dve rôzne URL adresy. Ako je správne aj to, že http://seochat.sk je defaultne niečo iné ako http://www.seochat.sk .

Ak by niekto rád podrobnejšie vysvetlenie, prosím založiť fórum na tému na http://forum.seochat.sk

7. head píše:
November 20th, 2007 at 12:10 pm

co mi vtom brani ?

~/public_html > touch priklad
~/public_html > mkdir priklad
mkdir: `priklad’ exists but is not a directory

to ze adresar je tiez len subor, cize nemozes mat dva subory s rovnakym menom ;) (dokonca ani na win)

stojim si za tym, ze tam nemoze byt aj subor aj adresar s rovnakym nazvom, dokaz opak ;)

8. tybi-admin píše:
November 20th, 2007 at 1:32 pm

Dokaz… daj do Google toto:
cache:http://www.squidoo.com/edi-news
cache:http://www.squidoo.com/edi-news/

Majú rozne cache, toť Google ich vidí, ako rozne URL adresy.

9. head píše:
November 20th, 2007 at 2:38 pm

Hmm mas pravdu, ze to google berie ako dve rozne url, ale nemal by, pretoze ako som pisal, je to jasne, ze to bude to iste (kedze nemozes mat aj subor aj adresar s rovnakym menom), cudujem, sa ze na to google bot nepride, kedze aj obsah je identicky

10. tybi-admin píše:
November 20th, 2007 at 3:35 pm

:))) Mal by si ísť robiť do Google…
Posledný-krát to hovorím, sú to rozne URL adresy, može byť na nich rozny obsah, takže Google to robí správne.
Ak to neide priamo vytvorením súboru a adresára, tak to prepíšeš pomocou mod_rewrite-u, to je jedno… Fakt je, že na nich može byť rozny obsah, a basta. Ak chceš reagovať, možeš, ale len na forum.seochat.sk.

11. head píše:
November 20th, 2007 at 7:13 pm

no len sa tak nerozculuj, ok beriem, mas pravdu su to rozne URL

howk ;)

12. playdude píše:
November 22nd, 2007 at 10:12 am

co vravite na taketo riesenie pomocou PHP .. je to tiez OK?

php if ($_SERVER["HTTP_HOST"] == “domena.sk”) {
header(“Location: http://www.domena.sk“,TRUE,301);
exit;
}

13. tybi-admin píše:
November 24th, 2007 at 10:25 am

Skoro som na tento komentár zabudol :).

Playdude, nie, nie je to OK! Vaše riešenie presmerováva všetko bez www na hlavnú stránku. Lenže Vy chcete (mali by ste chcieť), aby to presmerovalo na príslušnú stránku s www prefixom). Teda… http://seochat.sk/sluzby/ by sa malo presmerovať na http://www.seochat.sk/sluzby/ a nie na http://www.seochat.sk/.

Pomocou php sa to robí takto:

if (substr($_SERVER['HTTP_HOST'],0,3) != ‘www’) {
header(‘HTTP/1.1 301 Moved Permanently’);
header(‘Location: http://www.'.$_SERVER'HTTP_HOST'
.$_SERVER['REQUEST_URI']);
}

14. Termo píše:
Január 6th, 2008 at 11:53 am

Zdravim, mam problem s presmerovanim. Potrebujem totiz presmerovat subdomenu temadna.evolutionstudio.sk na http://www.temadna.evolutionstudio.sk

Pouzil som kod z vasich stranok, no nefunguje to…

Ked do prehliadaca napisem temadna.evolutionstudio.sk, tak ma to presmeruje na stranku http://www.temadna.evolutionstudio.sk/temadna/

nechapem preco… prosim o radu, vdaka:)

15. tybi-admin píše:
Január 6th, 2008 at 2:28 pm

Podľa mňa ti to už funguje… už si na to prišiel?

Pre subdoménu nedávaj htaccess súbor do rootu domény, ale do rootu subdomény, teda do adresára “temadna”. Myslím, že to bol tvoj problém.

Inak, pýtaj sa tu: http://forum.seochat.sk

16. Termo píše:
Január 6th, 2008 at 2:56 pm

nechapem, nefunguje mi to stale… Tebe to ide??? Subor .htaccess mam v adresari subdomeny.

Ked mam ten kod takto, tak to je spravne?

RewriteEngine On
RewriteCond %{HTTP_HOST} ^temadna.evolutionstudio.sk
RewriteRule (.*) http://www.temadna.evolutionstudio.sk/$1 [R=301,L]

Ked sme to tu uz zacali riesit, tak odpoviem sem, ale new otazky budem davat na forum, ok:)

Este raz vdaka za pomoc…

17. tybi-admin píše:
Január 6th, 2008 at 4:26 pm

Áno, máš to správne, checkni si to tu: http://www.webconfs.com/redirect-check.php
Found redirect to http://www.temadna.evolutionstudio.sk/. The Redirect is Search Engine Friendly.

18. Termo píše:
Január 6th, 2008 at 6:27 pm

Nerozumiem tomu, ale uz mi to ide. Pritom som ale nic nemenil.

Nie je mozne, ze ked som sa hral a skusal veci s .htaccess, tak sa server nejak zle nastavil a potom chvilu trva, kym sa server dobre nadstavi, ked tam dam spravny subor .htaccess?? Hadam mi rozumiete:)

19. Patrik píše:
Marec 2nd, 2008 at 4:44 pm

ahoj mám problém:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^rohozkarna.com
RewriteRule (.*) http://www.rohozkarna.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.htm\ HTTP/
RewriteRule ^index\.htm$ http://www.rohozkarna.com/ [R=301,L]

toto sem vložil do .htaccess a to první nejde (redirect na www) ale druhé jde (domena.com/index.htm na domena.com)
může mi někdo říct kde sem udělal chybu?? děkuji

20. tybi-admin píše:
Marec 4th, 2008 at 12:14 am

Patrik, bez dalších informací netuším, jak je to možné… Zeptej se na fóru (forum.seochat.sk) a přidej tam celý obsah htaccess.

21. Lordalea píše:
Apríl 25th, 2009 at 9:49 am

Ja som mala problem s nastavenim .htaccess pre wordpress – po nastaveni presmerovania mal wordpress problem so zobrazovanim podstranok.. vyriesilo to:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

22. Jano píše:
Máj 20th, 2009 at 5:36 pm

Chcel by som sa opytat na tuto direktivu:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

Preco je tam vyber znakov v rozsahu {3,9} suvisi to nejak s nazvom domeny?

Vdaka

24. Majo píše:
Jún 6th, 2011 at 3:53 pm

Nerozumiem jednej veci a neviem ako to vplivnit.
Neviem preco mi WORDPRESS automaticky presmeruvava
http://www.uspornaziarovka.sk/forum
na
http://uspornaziarovka.sk/forum

Automaticky mi vyhadzuje WWW z URL i napriek redirectu 301 ktory tam mam. vie niekto poradit ?

Súhlasíš - nesúhlasíš, reaguj!