Atrybut HTML lang

Co robi atrybut HTML lang, dlaczego Google ignoruje go przy wykrywaniu języka, jak używa go Bing, czym różni się od hreflang i dlaczego nadal ma znaczenie dla dostępności oraz automatycznego tłumaczenia w przeglądarce.

Opublikowano po raz pierwszy: 2 lip 2026 · Ostatnia aktualizacja: 23 sie 2026 · Zaawansowane
1 sygnał dowodowy na tej stronie

Atrybut HTML lang deklaruje naturalny język treści bieżącego dokumentu. Nie jest tym samym co hreflang: lang opisuje tę stronę, a hreflang wskazuje alternatywne URL-e. Google ignoruje lang przy wykrywaniu języka, ale Bing używa go jako sygnału zastępczego, a dostępność i przeglądarki nadal potrzebują prawidłowej wartości BCP 47.

TL;DR — lang deklaruje naturalny język tego dokumentu (<html lang="en"> albo wariant regionalny, taki jak en-US) za pomocą tagu BCP 47. To inny mechanizm niż hreflang, który deklaruje alternatywne językowo URL-e — własna dokumentacja Google wymienia oba jako elementy, których nie używa do wykrywania języka strony. Mueller: „w ogóle tego nie używamy… prawie zawsze jest błędny”. Niezależnie od znaczenia w wyszukiwaniu, możliwy do ustalenia programowo język strony jest wymaganiem WCAG 3.1.1 Level A, a atrybut HTML lang jest standardową techniką. Wspiera wymowę przez czytniki ekranu i podpowiedź automatycznego tłumaczenia w przeglądarce, a „brak zadeklarowanego języka dokumentu” nadal należy do sześciu najczęstszych błędów WebAIM Million. Jedyny wyjątek Google: oznaczanie bloków przetłumaczonych maszynowo wartością lang="es-x-mtfrom-en". Ustaw prawidłową wartość, zachowaj jej zgodność z hreflang i usuń szablonowe lang="en" ze stron nieanglojęzycznych.

Co faktycznie deklaruje atrybut lang

Atrybut HTML lang jest atrybutem globalnym — technicznie może znajdować się na dowolnym elemencie — ale najważniejszy umieszcza się na elemencie głównym: <html lang="en">. Jego wartość to tag językowy BCP 47, albo sam subtag języka (en, es, de), albo para język plus region (en-US, en-GB, pt-BR, zh-Hans).

To, co deklaruje, jest wąskie i konkretne: naturalny język treści tekstowej dokumentu, na którym go ustawiono. Nie język alternatywnych stron, nie kraj, na który kierujesz stronę — tylko „słowa na tej stronie są w tym języku”.

Dowód potwierdzający to twierdzenie The HTML lang attribute specifies an element's language using a valid BCP 47 language tag; on the root html element it establishes the document's default language. Zakres: WHATWG HTML language semantics and IETF BCP 47 tag syntax. Poziom ufności: wysoki · Zweryfikowano: WHATWG: The lang attribute IETF RFC 5646 Dowód potwierdzający to twierdzenie WCAG 2.2 success criterion 3.1.1 requires the default human language of a page to be programmatically determinable, and W3C lists lang on the html element as a sufficient HTML technique. Zakres: WCAG 2.2 Level A language-of-page requirement for HTML documents. Poziom ufności: wysoki · Zweryfikowano: W3C: Understanding Language of Page

Warto zapamiętać trzy punkty precyzji, wyciągnięte z dokumentacji MDN:

  • Tylko prawidłowe wartości. Tag BCP 47 — nie wymyślony kod trzyznakowy (eng), nie pełna nazwa języka i nie en-UK (subtag regionu dla Wielkiej Brytanii to GB). Nieprawidłowe wartości są traktowane jak brak wartości. Poprawność składniowa nie oznacza też poprawności znaczeniowej: lang="en" jest prawidłowym tagiem, który nadal jest błędny na stronie francuskiej. Prawidłowość to minimum, a nie gwarancja zgodności wartości z treścią.
  • Pusta wartość nie jest tym samym co brak. Jawne lang="" oznacza „język nieznany” — to zamierzony stan. Rzeczywisty brak atrybutu jest innym rodzajem awarii, a narzędzia dostępności zgłaszają go jako nieobecny, a nie jawnie nieznany.
  • Wartość główna jest domyślna, a nie niezmienna. <html lang> określa wartość dziedziczoną przez wszystkich potomków, dopóki nie zostanie nadpisana — ustaw lokalnie lang na elemencie zawierającym rzeczywistą zmianę języka. Nie myl tej deklaracji w dokumencie z nagłówkiem odpowiedzi HTTP Content-Language: nagłówek opisuje metadane transportowe odpowiedzi, a nie sparsowany dokument, i nie zastępuje lang przy dziedziczeniu na poziomie elementów ani w dostępności.

lang kontra hreflang: rozwiązanie nieporozumienia

Jeśli trafiłeś tutaj z pytania o hreflang, to jest sekcja dla Ciebie. Te dwa elementy są stale mylone, ponieważ oba dotyczą języka, oba znajdują się na początku dokumentu lub w jego pobliżu i oba używają podobnie wyglądających kodów. Wykonują jednak niezwiązane ze sobą zadania.

Najczystsze wyjaśnienie pochodzi wprost z własnej dokumentacji Google dotyczącej zlokalizowanych wersji stron, która wymienia oba właśnie po to, by powiedzieć, że żaden z nich nie służy do wykrywania języka:

Google nie używa hreflang ani atrybutu HTML lang do wykrywania języka strony; zamiast tego ustala język za pomocą algorytmów.

Przeczytaj to uważnie. Google wymienia lang i hreflang jednym tchem — jako dwie odrębne rzeczy, których nie używa do ustalenia, w jakim języku jest strona. Wykrywa język na podstawie wyrenderowanej, widocznej treści.

Jaka jest więc rzeczywista różnica?

  • lang to samoopis: jedna wartość na <html> (albo dowolnym elemencie), mówiąca „treść tego dokumentu jest w tym języku”. Odczytują ją przeglądarki, czytniki ekranu i moduły sprawdzania pisowni; używa jej Bing, a Google ignoruje ją przy wykrywaniu.
  • hreflang to mapa między stronami: zestaw adnotacji <link rel="alternate"> (albo odpowiednik w sitemapie lub nagłówku), wymieniający inne URL-e będące alternatywnymi językowymi lub regionalnymi wersjami tej strony oraz język, na który każdy z nich kieruje. To sygnał routingu, którego Google używa do serwowania właściwego wariantu URL-a w wynikach — nie sygnał wykrywania.

Mogą i często powinny współistnieć. Strona w meksykańskim hiszpańskim zawiera <html lang="es-MX">, opisujący jej własną treść, oraz zestaw tagów hreflang wskazujących rodzeństwo en-US, en-GB i inne. Pełne wdrożenie hreflang — trzy metody, zasada linkowania wzajemnego, zasada samoodnoszenia i skala częstych awarii — jest osobnym pogłębieniem; ten artykuł celowo nie odtwarza go od początku. Najważniejsze: lang jest prostszą połową tej pary (jedna wartość, jeden element, bez wzajemności), ponieważ nie niesie złożoności relacji między stronami właściwej hreflang — którą John Mueller nazwał kiedyś „jednym z najbardziej złożonych aspektów SEO”. Łatwe ustawienie nie oznacza jednak, że zwykle jest ustawiane poprawnie.

`lang` opisuje ten dokument dla przeglądarek i technologii wspomagających; hreflang mapuje alternatywne adresy URL na potrzeby routingu wyników wyszukiwania. Źródło: Google Search Central

Główny atrybut lang nadaje jednej stronie samookreślenie języka BCP 47 używane przez przeglądarki i czytniki ekranu. Hreflang jest wzajemną mapą między stronami i alternatywnymi adresami URL, takimi jak wersje en-US i es-MX. Google wykrywa język strony na podstawie widocznej treści, a nie któregoś z tych oznaczeń, ale wartość lang powinna pozostać prawidłowa i zgodna z wpisem hreflang dla tego samego adresu URL.

© Patrick Stox LLC · CC BY 4.0 ·

Czy atrybut lang jest czynnikiem rankingowym Google?

Krótka odpowiedź: nie, a Google wypowiadało się na ten temat wyjątkowo bezpośrednio. Rozstrzygające stwierdzenie pochodzi od Johna Muellera, cytowanego przez Barry’ego Schwartza w Search Engine Roundtable w artykule Google: ignorujemy atrybut HTML lang. Na pytanie, jak ważne jest zadeklarowanie języka strony w HTML-u, Mueller powiedział:

Mueller wyjaśnił, że Google opiera się na linkach hreflang dla różnych wersji językowych, lecz nie korzysta z atrybutu języka w znacznikach HTML, ponieważ takie deklaracje są niemal zawsze błędne i dlatego bywają ignorowane.

Kluczowe jest sformułowanie „prawie zawsze błędne”. Powodem ignorowania lang przez Google nie jest to, że „nie ma znaczenia”, lecz to, że sygnał jest niewiarygodny na skalę całego internetu. Ludzie pozostawiają szablonowe wartości lang="en" po lokalizacji treści; szablony CMS-ów i frameworków wysyłają wartość domyślną, której nigdy się nie aktualizuje (na przykład boilerplate generowany przez Vue CLI ma na stałe lang="en" niezależnie od tego, co zbudujesz). Gdy sygnał tak często jest błędny, rozsądnym posunięciem inżynieryjnym jest przestać mu ufać i wykrywać język bezpośrednio z treści — dokładnie to, co według Google robi. Cytat z 2016 r. jest stary, ale bieżąca dokumentacja Search Central niezależnie powtarza tę samą zasadę, więc traktuj ją jako wieloletnie, nieodwołane zalecenie, a nie nieaktualny wyjątek.

Jedyny wyjątek: treść tłumaczona maszynowo

Istnieje jedno wąskie miejsce, w którym dokumentacja Google faktycznie przywiązuje wagę do wartości typu lang. Wytyczne Google dotyczące tłumaczonych wyników proszą, aby oznaczać takie bloki specjalnym formatem — lang="<target>-x-mtfrom-<source>", na przykład lang="es-x-mtfrom-en" dla treści przetłumaczonej maszynowo z angielskiego na hiszpański. To wyjątek potwierdzający regułę: Google ignoruje lang przy ogólnym wykrywaniu języka, ale tę konkretną konwencję oznaczania zdefiniowało i odczytuje. Powiązana dźwignia, jeśli chcesz całkowicie wyłączyć funkcje tłumaczeniowe, to reguła notranslate — “To opt out of all translation features in Google Search, use the notranslate rule, which can be implemented as a meta tag or an HTTP header,” (tłumaczenie) „Aby zrezygnować ze wszystkich funkcji tłumaczenia w wyszukiwarce Google, użyj reguły notranslate, którą można wdrożyć jako metatag lub nagłówek HTTP”, zgodnie z tym samym dokumentem.

Czy Bing używa atrybutu lang?

Tak — i właśnie tu lang ma większe znaczenie niż sugeruje opowieść „Google to ignoruje”. Stanowisko Binga jest przeciwne do stanowiska Google i jest słabo omawiane.

W poście Bing Webmaster Blog z 2011 r. Jak powiedzieć Bingowi, jaki jest kraj i język witryny Bing przedstawia kolejność ważności sygnałów „lokalizacji dokumentu”, której używa do trafności. Od najwyższego do najniższego:

  1. Metatag content-language w <head> (<meta http-equiv="content-language" content="en-us">).
  2. Atrybut <html lang="en-us">, a następnie atrybut <title lang="en-us"> jako wartości zastępcze — „kolejność ważności tych tagów to: <meta>, <html>, <title>”.
  3. ccTLD.
  4. Wyszukiwanie reverse-IP — używane tylko wtedy, gdy wyższe sygnały nie dają rozstrzygnięcia.

Bing zaleca wybranie jednej opcji i konsekwencję: “It’s best that you use one option, instead of multiple options here.” (tłumaczenie) „Najlepiej użyć jednej opcji zamiast wielu opcji w tym miejscu.” W przeciwieństwie do Google Bing jawnie używa <html lang> jako rzeczywistego (choć niższego priorytetu) sygnału targetowania. W witrynie z istotnym ruchem z Binga zmienia to zalecane działanie: ustaw lang poprawnie i rozważ pasujący metatag content-language.

Zastrzeżenie: to wpis z 2011 r., obecnie usunięty z bieżącego archiwum bloga Binga. Cytuję go za zrzutem w Wayback Machine; nie znalazłem nowszego stanowiska Binga, które by mu przeczyło, więc traktuję opisany mechanizm jako nadal aktualny — ale uczciwie zaznaczam jego wiek zamiast przedstawiać go jako świeże zalecenie.

To domyka także wątek hreflang: Bing używa hreflang znacznie słabiej niż Google — content-language wraz z lang to równoległy mechanizm Binga.

Dlaczego atrybut lang i tak ma znaczenie: dostępność

Nawet całkowicie pomijając wyszukiwanie, lang ma swoje miejsce. Jest wymaganym atrybutem dostępności — kryterium sukcesu WCAG 3.1.1 (Level A) wymaga, aby domyślny język ludzki każdej strony był możliwy do ustalenia programowo, co w praktyce oznacza prawidłowy <html lang>. Osobne kryterium 3.1.2 obejmuje oznaczanie zmian języka wewnątrz strony.

Dowód potwierdzający to twierdzenie WCAG 2.2 success criterion 3.1.1 requires the default human language of a page to be programmatically determinable, and W3C lists lang on the html element as a sufficient HTML technique. Zakres: WCAG 2.2 Level A language-of-page requirement for HTML documents. Poziom ufności: wysoki · Zweryfikowano: W3C: Understanding Language of Page

Skutki są konkretne i dobrze udokumentowane (katalog Adriana Rosellego On Use of Lang Attribute przedstawia wiele z nich): czytniki ekranu używają lang do wyboru właściwego silnika wymowy i głosu (silnik fonetyczny JAWS, automatyczne przełączanie głosu VoiceOver), zależy od niego CSS hyphens: auto, zachowanie spellcheck, renderowanie znaków cudzysłowu i domyślny wybór fontu CJK, a wyświetlacze brajlowskie zachowują się z nim inaczej. Dokładne działanie każdego z tych elementów zależy od czytnika ekranu, przeglądarki i zainstalowanego głosu — własne testy Rosellego pokazują, że JAWS i VoiceOver nie zachowują się identycznie — dlatego prawidłową wartość lang traktuj jako włączenie właściwego zachowania, a nie gwarancję identycznego doświadczenia w każdym stosie technologii wspomagających.

To nadal nierozwiązany problem. Według bieżącego raportu WebAIM Million „brak zadeklarowanego języka dokumentu” występuje na 13,5% stron głównych — to szósty najczęstszy automatyczny błąd dostępności w sieci. Wskaźnik się poprawia (spadł z 15,8% w poprzednim roku oraz 17,1% i 18,6% wcześniej), ale „duży, malejący problem” nadal jest problemem. Własne narzędzia Google odzwierciedlają to ujęcie: kontrole Lighthouse html-has-lang i html-lang-valid znajdują się w kategorii Accessibility, a nie SEO — to dobra wskazówka, że nawet narzędzia deweloperskie Google klasyfikują lang jako problem dostępności, nie rankingu. Te kontrole opierają się na regule axe-core o tej samej nazwie, która klasyfikuje brak lang jako „Serious” problem WCAG 2,0/2,1 Level A.

Zachowanie przeglądarki: podpowiedź automatycznego tłumaczenia

Jest jeszcze jedno widoczne zachowanie, którym steruje lang: podpowiedź przeglądarki „Przetłumaczyć tę stronę?”. Chrome (i inne przeglądarki) waży lang wraz z analizą rzeczywistego widocznego tekstu, decydując, czy zaoferować tłumaczenie. Błędna albo brakująca wartość może zadziałać nieprawidłowo w obu kierunkach — błędnie zaproponować tłumaczenie strony już napisanej w języku czytelnika albo nie zaproponować go dla strony rzeczywiście obcojęzycznej.

Wyrazistym przykładem z życia jest artykuł Manuela Matuzovica Atrybut lang: gdy przeglądarki kłamią: austriacka telewizja ORF.at opublikowała niemiecką treść z lang="en", więc automatyczne tłumaczenie Chrome potraktowało niemiecki tekst jako angielski i go „przetłumaczyło”, zmieniając nazwę wiedeńskiej dzielnicy „Liesing” w angielskie słowo „lies”. To pułapka domyślnej wartości z boilerplate’u wywołująca błąd widoczny dla użytkownika — dokładna klasa problemu, którą opisywało „prawie zawsze błędne” Muellera.

Jak ustawić to prawidłowo

  • Użyj prawidłowego tagu BCP 47. Samego subtagu języka (en, es, fr), jeśli nie potrzebujesz rozróżnienia regionalnego; języka z regionem (en-US, en-GB, pt-BR), jeśli go potrzebujesz. Pobieraj kody z rejestru IANA Language Subtag Registry; nie wymyślaj ich i pamiętaj: GB, nie UK.
  • Ustaw go także na elemencie, który się zmienia. W przypadku obcego zwrotu osadzonego na skądinąd jednojęzycznej stronie ustaw lokalnie lang: <span lang="fr">c'est la vie</span>. Potomkowie bez własnej wartości dziedziczą lang najbliższego przodka, więc wartość główna obejmuje wszystko, czego nie nadpiszesz.
  • Usuń wartość szablonową. lang="en" dostarczone przez szablon lub CMS jest poprawne tylko wtedy, gdy treść faktycznie jest po angielsku. To awaria wskazana przez Muellera i miniatura błędu ORF.at — przeprowadź pod tym kątem audyt.
  • Zachowaj zgodność lang i hreflang. Jeśli lang strony mówi es-MX, a adnotacja hreflang tego samego URL-a mówi en, jest to niezgodność. To dokładnie problem „Niezgodność hreflang i HTML lang”, który opisałem w przewodniku Ahrefs dotyczącym hreflang — ująłem go tam jasno: „Google nie używa atrybutu języka HTML, ale inne wyszukiwarki i przeglądarki tak. Ważne jest zachowanie spójności tych dwóch atrybutów”. Google ignoruje połowę lang tego porównania, ale niezgodność nadal sygnalizuje, że coś jest źle skonfigurowane — dlatego narzędzia audytowe ją zgłaszają.

Typowe mity

  • „Prawidłowy lang poprawi moje pozycje w Google”. Nie. Google stwierdza, że w ogóle nie używa lang do wykrywania języka. Może on mieć znaczenie dla Binga i pośrednio pomagać dzięki dostępności oraz zachowaniu tłumaczenia, ale bezpośrednia korzyść rankingowa w Google nie jest potwierdzona.
  • „lang i hreflang to zasadniczo to samo”. Nie — lang opisuje stronę, na której się znajduje; hreflang wskazuje inne URL-e. Strona może mieć prawidłowy lang bez hreflang albo prawidłowy hreflang i błędny lang.
  • „Żadna wyszukiwarka nie interesuje się lang”. Bing jawnie się nim interesuje (jako sygnałem zastępczym za content-language). W witrynie z rzeczywistym ruchem z Binga nie jest to sytuacja „nikogo to nie obchodzi”.
  • „Pozostawienie domyślnego lang="en" jest nieszkodliwe, jeśli treść nie jest po angielsku”. To niemal dosłowne powtórzenie awarii nazwanej przez Muellera „prawie zawsze błędną” i właśnie to wywołuje błędne podpowiedzi tłumaczenia oraz błędną wymowę przez czytnik ekranu.
  • „Prawidłowy lang daje 22% wzrostu CTR” / „crawlery AI przetwarzają strony z tagiem lang o 40% szybciej”. Te konkretne liczby krążą na kilku blogach marketingowych SEO bez możliwego do prześledzenia badania, metodologii ani źródła pierwotnego. Nie udało mi się potwierdzić żadnej z nich w oficjalnych wypowiedziach ani danych pierwszej strony — traktuj je jako brzmiący pewnie, bezpodstawny folklor narastający wokół tematów technicznych o niskiej kontroli.
  • „Puste lang="" to to samo co brak lang”. Nie — jawna pusta wartość oznacza „język nieznany”, czyli inny stan niż rzeczywisty brak atrybutu.

Gdzie to pasuje

To pogłębienie na poziomie atrybutu w podklastrze HTML SEO — rodzeństwo dla omówienia elementów <article>, <nav> i <main> w artykule o semantycznym HTML-u oraz dla szerszego huba HTML SEO. Pełna historia targetowania między stronami — trzy metody wdrożenia, zasady wzajemności i skala awarii klastrów — znajduje się w pogłębieniu hreflang; zadaniem tego artykułu jest tylko utrwalić różnicę między nimi.

Dodaj notatkę eksperta

Przypnij cytat eksperta

Nowa osoba? Najpierw utwórz jej nieprzejęty profil na /admin/experts/ → Przypnij cytat eksperta .