Zjawisko "duplicate content" zachodzi wtedy, kiedy treść Twojego serwisu w całości lub jego części, jest osiągalna pod tymi samymi adresami URL jednocześnie. Dla wyszukiwarek domena mojadomena.pl oraz www.mojadomena.pl to dwa niezależne adresy. Jeśli serwis oferuje tą samą treść pod adresem "z www" jak i "bez www" (lub odwrotnie), lub też zawartość pod adresem /podstrona/ jest identyczna jak pod adresem /podstrona/?sort=asc, to mamy do czynienia własnie z tym okropnym zjawiskiem. Jako przykład tej drugiej sytuacji może posłużyć podstrona z prezentacją produktów, na której mamy możliwość sortowania listy według zadanych parametrów. Parametry przesyłamy w postaci query string (jako zmienne GET). Pomimo, że wizualnie lista się zmienia, to produkty wciąż widnieją te same, a skoro zawartość jest taka sama, to robot indeksujący odbiera to właśnie jako tytułowe zjawisko. Różnica w URL może zachodzić nie tylko na poziomie query string, ale już w path (to ten fragment zaczynający się po nazwie domeny).
Jest to efekt niepożądany ze względu na obniżenie wartości strony w indeksie Google. Metody, które przestawiam tyczą się tylko adresów URL. Nie mają natomiast zastosowania w przypadku kiedy Twój brat lub siostra bliźniak podkrada Ci gumy do żucia - tu lepiej zastosować przekierowanie problemu na rozmowę w cztery oczy (życzę Ci w tej sytuacji osiągnięcia statusu 301).
Jak uniknąć duplikowana zawartości na poziomie domenowym?
Należy przekierować wszystkie adresy dostępne "z www" na "bez www". Oczywiście jest możliwe odwrotne przekierowanie jeśli zdecydowałeś się, aby Twój serwis był osiągalny pod domeną z www.
Jeśli mamy podpiętą jedną domenę i chcemy przekierować "z www" na "bez www", możemy użyć następującej reguły:
#Sprawdzamy czy domena zaczyna się od www
RewriteCond %{HTTP_HOST} ^www\.
#Jeśli tak, to przekierowujemy URL na domenę bez www
RewriteRule ^(.*)$ http://mojadomena.pl%{REQUEST_URI} [R=301,L]
W przypadku kiedy przekierowujemy z "bez www" na "z www", reguły są nastepujące:
#Sprawdzamy czy domena nie zaczyna się (!) od www
RewriteCond %{HTTP_HOST} !^www\.
#Jeśli warunek jest spełniony, to przekierowujemy na domenę z www
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Możemy mieć jednak do czynienia z sytuacją kiedy chcemy przekierować wszystkie subdomeny na domenę bez www:
#Sprawdzamy czy domena zaczyna się od jakiegkolwiek przedrostka
RewriteCond %{HTTP_HOST} ^(.+)\.mojadomena.pl
#Jeśli warunek jest spełniony, to przekierowujemy na domenę bez www
RewriteRule ^(.*)$ http://mojadomena.pl%{REQUEST_URI} [R=301,L]
W powyższym przykładzie nie używamy warunku w postaci ^(.+)\., bo w takim przypadku domena bez www również spełniłaby ten warunek i nastąpiłoby przekierowanie (po czym znów spełnienie i znów przekierowanie - pętla przekierowań).
I jeszcze jeden przykład, kiedy chcemy wyłączyć z warunku jakąś subdomenę, np. używamy subdomeny sklep.mojadomena.pl:
#Sprawdzamy czy domena zaczyna się od jakiegkolwiek przedrostka
RewriteCond %{HTTP_HOST} ^(.+)\.mojadomena.pl
#i nie zaczyna się od sklep.
RewriteCond %{HTTP_HOST} !^sklep\.
#Jeśli warunek jest spełniony, to przekierowujemy na domenę bez www
RewriteRule ^(.*)$ http://mojadomena.pl%{REQUEST_URI} [R=301,L]
W przykładach flaga R=301 świadczy o tym, że przekierowanie nastepuje ze statusem HTTP 301. Oznacza to przekierowanie stałe i wyszukiwarka internetowa powinna uaktualnić dotychczasowe przekierowania na rzecz nowych.
Metody możemy używać również w przypadku przekierowania adresów z protokołu http:// na protokół https://.
Jak uniknąć zjawiska na poziomie fragmentów serwisu?
W tym przypadku z pomocą przychodzi element z atrybutem rel="canonical".
Jeżeli chcemy aby naszą podstawową, wzorcową podstroną była strona o adresie: /podstrona/, to w sekcji head innych podstron o innych adresach URL, dodajemy tag:
<link rel="canonical" href="http://mojadomena.pl/podstrona/" />
Taki tag nie powoduje przekierowania na wskazany adres, lecz informuje mechanizm indeksujący, że wzorcowa treść znajduje się pod tym adresem, a nie adresem, pod którym aktualnie jest robot.
Przydatne linki:
Tester reguł .htaccess
Status HTTP 301
Link canonical