Kluczowe wnioski TL;DR
W wypadku sprzecznych dyrektyw w metatag robots i x-robots-tag, Google pod uwagę weźmie tę która ogranicza indeksowanie, niezależnie od tego gdzie się znajduje.
Spis Treści
Metatag robots
Metatag robots to miejsce wykorzystywane przez webmasterów i specjalistów SEO najczęściej w celu przydzielania adresom URL tagu NOINDEX i NOFOLLOW. Jest to fragment kodu w sekcji <head>:
<!DOCTYPE html>
<html><head>
<meta name="robots" content="noindex" />
(…)
</head>
<body>(…)</body>
</html>
Metody dodawania metatagu robots
Celem jest umieszczenie w kodzie następującego fragmentu <meta name=”robots” content=”noindex, nofollow” />. Podstawowymi i najczęściej używanymi dyrektywami są index/noindex oraz follow/nofollow, w szczególnych wypadkach można wykorzystać inne, które też są wpierane przez Google.
Popularne CMS-y pozwalają na zarządzanie tymi tagami automatycznie. Dla przykładu w WordPressie służy do tego wtyczka YOAST:
Analogicznie w innych CMS-ach, zazwyczaj jest to podmenu „ustawienia SEO” lub funkcjonalność dodatkowych wtyczek/modułów.
Jednym kliknięciem można nadać NOINDEX wszystkim tagom, wszystkim wpisom, wszystkim archiwom itd. Jednakże w wielu wypadkach CMS nie pozwoli dopasować tych tagów w stopniu wystarczającym:
- niszowy lub autorski CMS może być całkowicie pozbawiony takich funkcji
- zarządzanie stronami do NOINDEX może być zbyt mało szczegółowe, np. w e-commerce zastosowanie tagu NOINDEX dla wybranych parametrów URL powiązanych z sortowaniem lub innymi parametrami (?sort=, ?price= itp.)
- jeśli CMS sklepu jest spersonalizowany bez uwzględnienia potrzeb SEO, może zdarzyć się, że „wyklikanie” ustawień w panelu nie przekłada się na kod strony.
W takich sytuacjach ratunkiem może być x-robots-tag.
x-robots-tag
Dyrektywę x-robots-tag dodaje się z poziomu konfiguracji serwera, a nie kodu HTML danej strony. Dlatego jeśli z różnych przyczyn nie ma możliwości zmiany metatagu robots w kodzie HTML lub skala jest zbyt duża żeby robić to ręcznie, pozostaje skorzystać z x-robots-tag. Na serwerach Apache dyrektywę należy dodać do pliku .htaccess, na serwerach Nginx do głównego pliku .conf. Poniżej przykład ze specyfikacji Google:
Apache x-robots-tag przykład
<Files ~ "\.pdf$">
Header set X-Robots-Tag "noindex, nofollow"
</Files>
Nginx x-robots-tag przykład
location ~* \.(png|jpe?g|gif)$ {
add_header X-Robots-Tag "noindex";
}
Między składnią Nginx i Apache są różnice, ale rezultat pozostaje ten sam. Powyższy fragment kodu przyzna wszystkim plikom .pdf oznaczenie noindex i nofollow. Bardzo ważne z punktu widzenia SEO jest to, że przydzielając NOINDEX za pomocą x-robots-tag można skorzystać z wyrażeń regularnych aby dopasować nawet tysiące adresów jedną linijką kodu.
Wyrażenia regularne w x-robots-tag
x-robots-tag wspiera dopasowania do ciągów znaków zapisane w formie RegEx (wyrażeń regularnych). Innymi słowy, kluczowe jest znalezienie wspólnego mianownika dla wszystkich adresów które chcemy oznaczyć dyrektywą NOINDEX. Poniżej dwa przykłady – podstawowy i zaawansowany:
Noindex dla wybranych parametrów URL
RewriteCond %{QUERY_STRING} (?dir=|?order=|?sort=|?limit=|?query=|?q=)
RewriteRule .* - [E=NOINDEX_HEADER:1]
Header set X-Robots-Tag "noindex, nofollow" env=REDIRECT_NOINDEX_HEADER
Powyższy kod przyzna nagłówek NOINDEX wszystkim adresom URL zawierającym wskazane w alternatywach (znacznik „|” ) parametry URL. W praktyce – wszystkim adresom URL które zawierają wskazane ciągi znaków.
Noindex dla katalogów zawierających rozmiary
RewriteCond %{QUERY_STRING} \-[0-9]{2,3}x[0-9]{2,3}\/
RewriteRule .* - [E=NOINDEX_HEADER:1]
Header set X-Robots-Tag "noindex, nofollow" env=REDIRECT_NOINDEX_HEADER
Przykład zaczerpnięty z serwisu nad którym pracowałem. Autorski CMS generował duplikacje produktów i kategorii poprzez dokładanie filtra rozmiarów do adresów URL. Adresy URL zawierały wtedy wybrany rozmiar, który był dodany po przecinku. Wymiary były 2 i 3 cyfrowe i zawsze po wymiarze był slash. Przykład:
domena.pl/kategoria-50×200/produkt.html
Niezbędne okazało się oznaczenie wszystkich tych adresów tagiem NOINDEX (z różnych przyczyn technicznych inne rozwiązania nie wchodziły w grę – canonicale, przekierowania itp.). Powstała zatem reguła która dodawała NOINDEX do adresów zawierających ciąg znaków zaczynający się od myślnika, następnie zawierający 2 lub 3 cyfrowy ciąg znaków, literę X, kolejny 2 lub 3 cyfrowy ciąg znaków i slash. Tego typu konkretna reguła zabezpiecza nas przed nadawaniem tagu NOINDEX adresom przypadkowym, które nie powinny się w tej puli znaleźć. Samo wyizolowanie np. myślnika po którym następują cyfry, mogłoby przypadkiem wyindeksować produkty. Starczyłby produkt o nazwie „odkurzacz GHV-400”. Do nauki i testowania wyrażeń regularnych polecam:
Regexr.com – edytor i tester wyrażeń regularnych
Sprzeczne dyrektywy x-robots-tag i metatag robots
Powyższe rozważania stawiają bardzo ważne pytanie – co jeśli dyrektywy w tych dwóch miejscach są sprzeczne?
metatag robots | x-robots-tag | rezultat w GSC |
---|---|---|
index | noindex | noindex |
noindex | index | noindex |
noindex | noindex | noindex |
Test przeprowadzony został na bazie analizy konkretnych adresów w Google Search Console. Wbrew obiegowym opiniom nie jest tak że:
- metatag robots nadpisuje x-robots tag
- dyrektywa INDEX zawsze nadpiszę NOINDEX
Dyrektywa uznana przez Google, to będzie zawsze ta ograniczająca indeksowanie, niezależnie w jaki sposób została wdrożona.
Tyczy się to zarówno NOINDEX jak i NOFOLLOW.
Co to oznacza w praktyce?
W pierwszej kolejności zawsze najlepiej szukać rozwiązania w kodzie HTML czyli w metatag robots. Dobrym pierwszym krokiem będzie przeanalizowanie odpowiedzi na poniższe pytania:
- Czy mój CMS pozwoli mi wprowadzić zmiany automatycznie?
- Jeśli nie, to czy skala zmian jest tak mała, że mogę wprowadzić je w kodzie ręcznie?
Jeśli tak, nie ma potrzeby korzystać z x-robots-tag. Natomiast jeśli nie, rozwiązania problemu należy szukać w pliku .htaccess poprzez ręczną konfigurację dyrektywy i wyrażeń regularnych.
Jak przetestować zmiany
Niezależnie od wybranej metody warto przetestować czy tagi NOINDEX i NOFOLLOW działają:
Z poziomu przeglądarki wtyczką lub podejrzeniem kodu
Świetną wtyczką do sprawdzania kodów odpowiedzi serwera i meta tagów jest Link Redirect Trace.
Ikonka wtyczki pokazuje wykrzyknik gdy wykryje jakieś przeszkody w indeksowaniu (meta tag robots, robots.txt, x-robots-tag), a po kliknięciu i rozwinięciu okienka podaje szczegóły, czyli jaka konkretnie jest to dyrektywa i skąd się wzięła. Metodą ręczną, nie wymagającą instalacji wtyczki, będzie podejrzenie kodu strony (ctrl+u) i wyszukanie frazy NOINDEX.
Podglądając kod należy jednak pamiętać o tym, że nie znajdują się tutaj efekty działania x-robots-tag. Dyrektywa x-robots-tag serwowana jest przez HTTP headers, ich zawartość można podejrzeć za pomocą narzędzia „Zbadaj” w przeglądarce Chrome.
- Naciśnij F12 aby otworzyć narzędzie deweloperskie w Chrome
- Wczytaj/odśwież stronę którą chcesz sprawdzić
- Wybierz zakładkę „network”
- Z listy wczytanych elementów wybierz adres URL danej strony
- W oknie ze szczegółami wybierz zakładkę „headers”
- Rozwiń listę „response headers” i szukaj atrybutu „x-robots-tag”.
Jeśli wszystko działa prawidłowo, ustawiona wcześniej dyrektywa powinna być widoczna, np.
x-robots-tag: noindex
Z poziomu Google Search Console badając adres URL
Sprawdzenie adresu za pomocą Google Search Console
W polu Czy indeksowanie jest dozwolone znajduje się odpowiedź czy Google widzi dyrektywy NOINDEX które chcemy nadać danemu adresowi. Jeśli zmiany zostały dopiero wprowadzone, wersja znajdująca się w indeksie Google na pewno jeszcze ich nie uwzględnia, w takim wypadku należy wysłać prośbę o zindeksowanie i następnie przejrzeć test wersji opublikowanej. Jeśli w wynikach testu wersji opublikowanej nie widać blokady indeksowania, nie będzie ona działać.
Które narzędzia wykorzystać do sprawdzenia czy NOINDEX działa:
GSC | Link Redirect Trace | Kod strony | Chrome „zbadaj” | |
---|---|---|---|---|
Metatag Robots | TAK | TAK | TAK | TAK |
x-robots-tag | TAK | TAK | NIE | TAK |