sty 24th, 2007
Usuwanie Duplicate Content w WordPress
W jednym z poprzednich postów Wyniki uzupełniające w Google pisałem o kwestiach zduplikowanej treści w serwisach i wynikającego z tego problemu wyników uzupełniających, które są swego rodzaju indeksem drugiego sortu w Google. Problem zduplikowanej treści szczególnie często pojawia się przy okazji blogów, gdzie w wielu przypadkach ta sama treść jest dostępna pod tymi samymi adresami.
W dzisiejszym poście postaram się przedstawić jeden ze sposobów rozwiązania problemu zduplikowanej treści w systemie WordPress.
1. Adres z www i bez www
- Problem
Pierwszą i podstawową kwestią, na którą warto zwrócić uwagę jest poruszana przeze mnie kilka razy kwestia adresów z www i bez www serwisów. Dla robotów Google adresy http://www.ittechnology.us/ i http://ittechnology.us/ są dwiema różnymi stronami. W przypadku kiedy jeden z tych adresów nie zostanie przekierowany na drugi z nich będziemy mieli dwie witryny, na których siłą rzeczy zawsze będzie ta sama treść.
- Rozwiązanie
Problem ten można rozwiązać dodanie prostego kodu do pliku .htaccess
[code lang=”html”]
RewriteCond %{HTTP_HOST} ^ittechnology.us
RewriteRule ^(.*)$ http://www.ittechnology.us/$1 [R=permanent,L]
[/code]
2. Ta sama treść w postach, kategoriach, Tagach
- Problem
Budowa WordPressa sprawia, że w wielu miejscach bloga mamy tę samą treść dostępną pod różnymi adresami. Nie ma znaczenie przecież czy wybierzemy http://www.ittechnology.us/2007/01/ czy też http://www.ittechnology.us/category/pozycjonowanie-optymalizacja/ , http://www.ittechnology.us/tag/optymalizacja. Pod tymi wszystkim adresami mamy te same posty przedstawiane w różnej kolejności i różnym układzie.
- Rozwiązanie 1
Po części problem zduplikowanej treści można rozwiązać w WordPress poprzez zastosowanie znacznika More”. W takiej sytuacji na podstronach serwisu , podstronach kategorii i itp. będą się wyświetlały tylko fragmenty postów, a ich cała treść będzie dostępna dla użytkownika po klikniecie linka „Więcej”.
Opis zaimplementowania treści opartej na znaczniku więcej można znaleźć pod adresem: http://codex.wordpress.org/Customizing_the_Read_More
W najprostszym wydaniu tego rozwiązania wystarczy użyć quicktagu More w Panelu Sterowania (w Administration > Write > Post mamy takie tagi jak bold, italic, more, link). Wystarczy ustawić kursor w miejscu gdzie chcemy zakończyć nasze wprowadzenie postu i kliknąć tag „more”, co spowoduje wklejenie w tym miejscu odpowiedniego znacznika tagu funkcjonalności „More”.
Uwaga: aby widzieć te znaczniki trzeba wyłączyć edytor WYSIWYG w Wordoress, co można zrobić w Opcje > Publikacja > Opcje publikacji wpisów poprzez odznaczenie „Włączaj domyślnie edytor WYSIWYG”
- Rozwiązanie 2
Trochę bardziej skomplikowanym i jednocześnie najbardziej skutecznym rozwiązaniem problemu zduplikowanych adresów w WordPressie jest nakazywanie robotom wyszukiwarek indeksowanie tylko części adresów poprzez które udostępniamy swoją treść.
W przypadku kiedy chcemy, aby roboty indeksowały tylko adresy postów i adresy stron plus adres strony głównej (czyli tylko http://www.ittechnology.us/ bez http://www.ittechnology.us/page/2/ i itp.) można wkleić w sekcję HEAD pliku header.php naszej skórki WordPressa kod:
[code lang=”php”]
<?php if ( $paged >1 ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_search() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_archive() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_trackback() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
[/code]
Jeżeli stosujemy również tagi na naszej stronie kod ten może wyglądać
[code lang=”php”]
<?php if ( $paged >1 ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_search() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_archive() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_tag() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
<?php if (is_trackback() ) {
echo ‚<meta name="robots" content="noindex,follow"/>’;
}?>
[/code]
Kod ten będzie nakazywał robotom nieindeksowanie kolejnych stron serwisu poza adresem strony głównej, archiwów, treści trackback, wyników wyszukiwania, a w drugim przypadku również adresów tagów.
3. Treści RSS
- Problem
Roboty Google indeksują wszystko co się daje zindeksować, w tym również treści postów w formacie xml tworzone na potrzeby czytników RSS (w postaci np. http://www.ittechnology.us/najczestsze-bledy-w-adwords/feed/ ). Indeksowane treści są uznawane przez roboty Google za zduplikowaną treść. Nierzadko się zdarza, że robot indeksuje wówczas tylko treść RSS, uznając, że sama treść postu jest tylko jego kopią.
- Rozwiązanie
Warto przekonwertować wszystkie dostępne kanały dostępu do naszego serwisu w jeden poprzez implementację wtyczki FeedBurner. Implementacja tej wtyczki została pokrótce opisana w poście
Wtyczki WordPressa – część 4
. Wówczas to przekonwertowane kanały RSS naszych postów są dostępne pod jednym adresem w domenie FeedBurner.com (dla serwisu http://www.ittechnology.us/ jest to np. http://feeds.feedburner.com/MarketingWInternecie )
Jeżeli wcześniej jakieś adresy RSS dla naszych postów zostały zindeksowane przez Google warto usunąć je z indeksu Google. Można to zrobić tworząc przekierowanie 301 na adresy postów (po kliknięciu na adres adresu RSS w wynikach Google zostaniemy przeniesieni na odpowiadający danej treść RSS post).
- Przykład
W serwisie http://www.ittechnology.us/ adresy postów miały postać http://www.ittechnology.us/patenty-google/feed/ . Aby przekierować wszystkie adresy RSS na adresy postów wystarczyło do pliku .htaccess dodać kod:
[code lang=”html”]
RewriteRule ^(.+/)feed/?$ /$1 [R=301,L]
[/code]
Przedstawione wyżej proste zabiegi powinny zapobiec problemowi zduplikowanej treści w WordPressie. Oczywiście nie wyczerpują one tematu, a jedynie naprawiają najpoważniejsze problemy związane z tym zagadnieniem. Wszelkie kody pokazane w poście można modyfikować według swoich potrzeb i dostosowywać je do charakteru swojego bloga.
Jeżeli ktoś ma jeszcze jakieś pomysłu na dodanie czegoś do tematu, zachęcam do dyskusji :).
W przypadku, kiedy uznasz strone za przydatna dodaj na swojej stronie link do niej.
Po prostu skopiuj i wklej link podany nizej (Ctrl+C to copy)
Wyglad linku po wklejeniu na stronie: Usuwanie Duplicate Content w WordPress
Dodaj link do:
| | | Y! MyWeb | +Google
Kolejny świetny wpis :-). Wkrótce rady z niego zastosuję u siebie.
Jak zwykle mam małe uwagi / poprawki 😉
1. A propos wyłączania edytora WYSIWYG, oprócz tej opcji o której napisałeś (lub zamiast) trzeba w Autorzy -> Twój Profil odznaczyć opcję “Używaj edytora WYSIWYG przy publikacji wpisów” (ostatnio próbowałem wyłączyć to się trochę naszukałem:-P).
2. Zamieszczony kod PHP zamieniłbym na taki (to ten drugi kod z tagami):
[code lang=”php”]
< ?php if ( $paged >1 OR is_search() OR is_archive() OR is_tag() OR is_trackback() )
echo ‘’;
[/code]
Pozdrawiam 🙂
Oj sory myślałem że masz wklejanie PHP włączone, kog oczywiście jest taki:
[code lang=”php”]
< ?php if ( $paged >1 OR is_search() OR is_archive() OR is_tag() OR is_trackback() )
echo ‘’;
?>
[/code]
No tak masz rację, kod będzie wtedy dużo krótszy i prostszy 🙂 No cóż programowanie to nie jest moja mocna strona 🙂
Co do kodu to używam wtyczki do koloryzowania kodu. Jak chcesz, aby się jakiś kod php ładnie wyświetlał to wrzucasz go pomiędzy znaczniki
[code lang=”php”]
[code lang=”php”]
[/code]
[/code]
Mam nadzieję, że moje rady się przydadzą :). Polecam jeszcze zastosowanie SEO Title i Head Meta Description. Są one opisane w
Wtyczki WordPressa – część 3.
A co z adresami z komentarzami czyli np. http://www.ittechnology.us/usuwanie-duplicate-content-w-wordpress/#comments
Przecie to ma te samą treść, co post. Czyż nie?
Roboty nie będą indeksowały adresów po znaku „#”. Z tego względu nie ma tutaj problemu z Duplicate Content
A propo adresu z www czy bez www, Google proponuje po prostu ustawić to w Google sitemaps.
Masz rację. Warto to uściślić również w SiteMaps W sumie warto zrobić jedno i drugie 🙂 Kod w .htaccess usuwa problem z zduplikowanymi adresami z WWW i bez www dla adresów, które zostały już zindeksowane przez Google.
[…] Szczegółowy opis wszystkich aspektów usuwania zduplikowanych adresów w obrębie serwisu, opartego na Wordpresie można znaleźć w moim poście: Usuwanie Duplicate Content w WordPress. […]
… no tak – wklejam ten kawałek do .htaccess i przestają działać linki na stronie … tzn. wszystkie przekierowują na główną.
A mam tam też takie coś:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Co zrobić ?
Witam serdecznie. O który kawałek Ci dokładnie chodzi?
Coś w stylu
?
Spróbuj w takiej postaci – jeżeli dobrze zgaduje, że o to Ci chodziło
[code lang=”php”]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^csselite.pl
RewriteRule ^(.*)$ http://www.csselite.pl/$1 [R=permanent,L]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
[/code]
Powinno działać 🙂
Tak 🙂 Dzięki serdeczne – czasami łatwiej mi zrozumieć moją żonę niż ten .htaccess …
Cieszę się, że się przydało. .htaccess to dość cięzka rzecz. Na szczęcie tak naprawdę sprawę z nim załatawia parę skryptów, które się nieustannie przewijają. 🙂
Witam !
Dzieki za przydatne informacje
własnie stawiam na bazie Word Pressa
nową strone internetowa Polska w internecie
zapraszam już wkrótce
Henry
Oczywiście odwiedzę. Pamiętaj jednak, że najważniejsza jest wartościowa treść, dopiero później optymalizacja – a najlepiej i jedno i drugie 🙂
Zamiast kombinować z FeedBurnerem nie wystarczy dodać
/feed
/*/feed
i całej reszty do robots.txt?
Tak też można. W przypadku np. tagów, dodatkowych stron po stronie głównej, wyników wyszukiwania i itp lepszym wyjściem są znaczniki. Już nawet przedstawianie fragmentów postów na stronach z wynikami rozwiązuje częściowo problem.
Znaczniki czyli to o czym piszesz w notce?
Tak, np:
[code lang=”php”]
[/code]
Dlaczego są lepszym wyjściem? U Ciebie ich nie widzę 🙂
Zobacz adresy typu:
http://www.ittechnology.us/tag/adwords
http://www.ittechnology.us/page/2/
Tam są znaczniki 🙂
Mógłbyś opisać jak je tam powstawiałeś 🙂
Opisałem to właśnie w tym poście w punkcie 2 w podpunkcie 2 rozwiązanie.
Wklejasz w sekcję HEAD pliku header.php naszej skórki WordPressa kod:
[code lang=”php”]
< ?php if ( $paged >1 ) {
echo ‘’;
}?>
< ?php if (is_search() ) { echo ‘’;
}?>
< ?php if (is_archive() ) { echo ‘’;
}?>
< ?php if (is_trackback() ) { echo ‘’;
}?>
[/code]
dla ścisłości i przejrzystości:
[code lang=”php”]
< ?php if ( $paged >1 || is_trackback() || is_search() || is_archive() )
echo ‘’;
?>
[/code]
oj, wcieło kod 😉
is_tag odnosi się do domyślnych wordpressowych kategorii czy tagów z jakieś wtyczki?
Ale już na takiej http://www.ittechnology.us/2007/08/ podstronie znaczników nie widzę. Dlaczego?
wallace: tak, wiem – chodzi Ci o to co wyżej zaproponował groadin.
@hmm – is_tag odnosi się do tagów tworzonych przy okazji wtyczki http://www.neato.co.nz/ultimate-tag-warrior/ (u mnie jest to połowicznie zaimplementowane – z braku czasu 🙁 ). Jeśli chodzi o daty to z nimi dałem sobie już spokój (wymagało by to dodatkowej pracy, a znów kłania się brak czasu 🙂 )
@wallace – naprawione 🙂
Daty można wrzucić do robots.txt właśnie. Tak samo będę chyba musiał zrobić ze standardowymi kategoriami.
A is_archive do czego w takim razie się odnosi?
Oj, nie zauważyłem komentarza groadina.
Z tym, że dałbym (isset($paged) && $paged>1) zamiast samego $paged > 1 (na wszelki wypadek, gdyby zmienna $paged nie była inicjowana).
is_archive – wyświetlanie postów wg kategorii, autora lub daty.
Osobiście stosuje robots.txt:
User-agent: *
Disallow: /wp-admin
Disallow: /feed
Disallow: /comments/feed
Disallow: /tag/
Disallow: /category/
Disallow: /2006/
Disallow: /2007/
Disallow: /page/
Dzięki wallace za info. Sam kiedyś będę musiał z tym wszystkim zrobić porządek, problem jest tylko z czasem…
Hmm rzeczywiście robots.txt może być najprostszym rozwiązaniem (zwłaszcza z zastosowaniem Narzędzi dla Webmasterów)
hmm: no hmm, a coś obsługuje „gwiazdki” w ścieżkach (może google to ostatnio wprowadziło, ale nie jestem pewien) ?
No hmm w zasadzie nie wiem ale zobacz ile tu http://www.ittechnology.us/robots.txt ich jest 😉
No ale to właśnie tylko dla Googla (wiedziałem) 😉
Tylko dla Googla? Chyba aż 🙂
A tak poza tym to chyba
Disallow: /2007/
Disallow: /page/
powinno wyglądać tak
Disallow: /2007
Disallow: /page
bo
http://www.spiders.pl/robots_txt-syntax.php
Zamiast pisać: 'Disallow: /tmp/*' napisz: 'Disallow: /tmp'.
Nie zgodzę się. Mimo, że to nie są rzeczywiste katalogi, tak powinny być traktowane i przedstawiane – z prawym ukośnikiem na końcu. Teoretycznie WP powinien przekierować taki adres bez slasha na adres ze slashem (tak jak to robi każdy demon WWW przy rzeczywistych katalogach).
Więc nie zgodzę się ze względu na spójność.
Aczkolwiek za Twoją formą przemawia właśnie fakt, że WP pozwala na obie formy, nie przekierowuje i wyświetla tą samą treść (duplicate content?).
Z drugiej strony WP generuje linki ze slashem na końcu, więc jeżeli ręcznie nie podamy Google adres bez slasha, nie ma takiego problemu.
Podsumowjąc, sprawa dyskusyjna 😉
Ja zostaje przy swoich slashach, działają sprawnie 😉
ps. przytoczony tekst odnosi się do korzystania z gwiazdki, a nie czy na końcu ma być slash czy nie 😉 Treść tekstu widać powstała nim G nauczyło się obsługiować gwiazdki 😉
ps2. może i AŻ, ale mimo wszystko chciałbym, aby wszystkie roboty rozumiały co ja do nich mówie w robots.txt (tworząc strone też chcesz, aby uzytkownik każdej przegladarki ją zobaczył tak jak Ty chcesz ;p). powstaje pytanie, co zrobią inne roboty z gwiazdką? a może już wprowadziły podobne usprwanienia? czy może traktują ją po prostu jako część istniejącej ścieżki?
„ps. przytoczony tekst odnosi się do korzystania z gwiazdki, a nie czy na końcu ma być slash czy nie”
Tak tylko ja miałem na myśli brak slasha jako „otwartość” czyli dowolność po /page bo jak to zamkniemy /page/ to wydaje się już nie być „otwartość” a „zamkniętość”.
Czyli nie uwzględnianie np. /page/2/
Nie nie, /page/2/ zawarte jest zarówno w /page jak i /page/
Jedyne czego nie zawiera /page/ to /page
Ok.
Właśnie zauważyłem że na wielu blogach opartch na wordpressie adresy strony statycznych zakończone są slashem a gdy wpiszę adres bez slasha to jest przekierowanie. U mnie coś takiego nie występuje i widzę że u Ciebie wallace też.
Ożywiona dyskusja 🙂 Faktycznie moje wpisy w robots i template powstały jakiś czas temu i nie do końca nieraz były spójne. Czesto pisanie samego bloga zabierało mi tyle czasu, że już niewiele czasu mogłem poświęcić na sprawy techniczne i optymalizacyjne 🙁
wszystko pieknie ale czy nikt nie czuje potrzeby np. okresowego czesania wszystkich wpisow pod katem duplicate content ?
Mowie o automacie ktory moznaby zapuszczac okresowo, przeciez majac 20 blogow recznie nikt tego nie zrobi a ryzyko tego ze po jakims czasie zaczna sie pojawiac identyczne wpisy w sieci jest bardzo duze. Wszyscy pisza o tym jak dostosowac wp do tego aby strona z www i bez www nie byla traktowana jak duplicate content a nie znalazlem ani jednego postu (szukam od dwoch tygodni) na temat jakiegos narzedzenia sprawdzajacego unikalnosc wpisow.
1. Ten tutorial był sporządzony dla bloggerów, aby pomóc im chronić swoją treść, a nie dla tworzenia spamerskiego „zaplecza”, które najczęściej jest tworzone w ten sposób, że się „podbiera” bez zgody autorów treść z wielu blogów i się próbuje ją miksować
2. Unikalność treści można sprawdzać na http://www.copyscape.com
Zgadzam sie w pełni .
To w jakim stopniu jest zaśmiecony internet zależy od nas samych
Serdecznie pozdrawiam Henry
Dla najprostszego rozwiązania duplicate contet w WP, to wtyczka All in One SEO Plugin Options:
http://semperfiwebdesign.com/portfolio/wordpress/wordpress-plugins/all-in-one-seo-pack/
pozdrawiam 🙂
Witam,
a ja mogę polecić wtyczkę All in One Seo.
Po zainstalowaniu nie trzeba się martwić duplicate content:
– w tagach
– kategoriach
– archiwach
itp.
Sprawdźcie.
Pozdrawiam
[…] http://www.ittechnology.us/usuwanie-duplicate-content-w-wordpress […]
Ja zastosowałem następująco:
1. tagi – opisałem je w meta czyli mają swoje opisy a wyświetlane posty pod nimi to skróty
2. Wyłączyłem z indeksacji archiwa dat
3. Nie indeksuję niewykorzystywanych typów i formatów treści
4. Adres główny z przekierowaniem na www
Ale nie wiem jak wykluczyć page-1,2,3 bo nie chce mi zaakceptować kodu jaki podałeś.
Pozdrawiam