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: 3 sie 2026 · Advanced
Języki
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: “we don’t use that at all… almost always wrong.” 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 „missing document language” 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.

Element kodu źródłowego: <html lang="en">

Cytat źródłowy: “missing document language”

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”.

Evidence for this claim 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. Scope: WHATWG HTML language semantics and IETF BCP 47 tag syntax. Confidence: high · Verified: WHATWG: The lang attribute IETF RFC 5646 Evidence for this claim 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. Scope: WCAG 2.2 Level A language-of-page requirement for HTML documents. Confidence: high · Verified: W3C: Understanding Language of Page

Cytat źródłowy: “the words on this page are in this language.”

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.

Cytat źródłowy: “unknown language”

Cytat źródłowy: “Set it on the element that changes, too”

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 doesn’t use hreflang or the HTML lang attribute to detect the language of a page; instead, we use algorithms to determine the language.”

Cytat źródłowy: “Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page; instead, we use algorithms to determine the language.”

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.

Cytat źródłowy: “this document’s content is in this language.”

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.

Element kodu źródłowego: <html lang="es-MX">

Cytat źródłowy: “one of the most complex aspects of SEO.”

`lang` describes this document for browsers and assistive technology; hreflang maps alternate URLs for search-result routing. Źródło: Google Search Central

The root lang attribute gives one page a BCP 47 language self-description used by browsers and screen readers. Hreflang is a reciprocal cross-page map between alternate URLs, such as en-US and es-MX versions. Google detects a page's language from visible content rather than either annotation, but the lang value should remain accurate and consistent with the hreflang entry for the same 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: We Ignore The HTML lang Attribute. Na pytanie, jak ważne jest zadeklarowanie języka strony w HTML-u, Mueller powiedział:

“We don’t use that at all. So we use the hreflang links if you have that if you have different language versions. But the language attribute within the HTML markup is something we don’t use at all. We’ve found that this language markup is something that is almost always wrong. So we tend to ignore that.”

Cytat źródłowy: “We don’t use that at all. So we use the hreflang links if you have that if you have different language versions. But the language attribute within the HTML markup is something we don’t use at all. We’ve found that this language markup is something that is almost always wrong. So we tend to ignore that.”

Kluczowe jest sformułowanie „almost always wrong”. 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.

Cytat źródłowy: “almost always wrong”

Cytat źródłowy: “it’s unimportant”

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”, zgodnie z tym samym dokumentem.

Cytat źródłowy: “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,“

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.

Cytat źródłowy: “Google ignores it”

W poście Bing Webmaster Blog z 2011 r. How To Tell Bing Your Website’s Country and Language Bing przedstawia kolejność ważności sygnałów „lokalizacji dokumentu”, której używa do trafności. Od najwyższego do najniższego:

Cytat źródłowy: “document location”

  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.

Element kodu źródłowego: <meta http-equiv="content-language" content="en-us">

Cytat źródłowy: “the priority order for these tags is: <meta>, <html>, <title>.”

Bing zaleca wybranie jednej opcji i konsekwencję: “It’s best that you use one option, instead of multiple options here.” 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.

Cytat źródłowy: “It’s best that you use one option, instead of multiple options here.”

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.

Evidence for this claim 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. Scope: WCAG 2.2 Level A language-of-page requirement for HTML documents. Confidence: high · Verified: 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 „missing document language” 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.

Cytat źródłowy: “missing document language”

Cytat źródłowy: “a large, shrinking problem”

Cytat źródłowy: “Serious”

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.

Cytat źródłowy: “Translate this page?”

Wyrazistym przykładem z życia jest artykuł Manuela Matuzovica the lang attribute: browsers telling lies, telling sweet little lies: 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 „almost always wrong” Muellera.

Cytat źródłowy: “translated”

Cytat źródłowy: “Liesing”

Cytat źródłowy: “lies.”

Cytat źródłowy: “almost always wrong”

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 „Hreflang and HTML lang mismatch”, który opisałem w przewodniku Ahrefs dotyczącym hreflang — ująłem go tam jasno: „Google doesn’t use the HTML language attribute, but other search engines and browsers do. It’s important to keep these two attributes consistent with one another.” Google ignoruje połowę lang tego porównania, ale niezgodność nadal sygnalizuje, że coś jest źle skonfigurowane — dlatego narzędzia audytowe ją zgłaszają.

Element kodu źródłowego: <span lang="fr">c'est la vie</span>

Cytat źródłowy: “Hreflang and HTML lang mismatch”

Cytat źródłowy: “Google doesn’t use the HTML language attribute, but other search engines and browsers do. It’s important to keep these two attributes consistent with one another.”

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 „almost always wrong” 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.

Cytat źródłowy: “Correct lang will improve my Google rankings.”

Cytat źródłowy: “lang and hreflang are basically the same.”

Cytat źródłowy: “No search engine cares about lang.”

Cytat źródłowy: “nobody cares”

Cytat źródłowy: “Leaving the default `lang=”

Cytat źródłowy: ”` is harmless if my content isn’t English.”

Cytat źródłowy: “almost always wrong,”

Cytat źródłowy: “Correct lang gives a 22% CTR lift”

Cytat źródłowy: “AI crawlers process lang-tagged pages 40% faster.”

Cytat źródłowy: “An empty `lang=”

Cytat źródłowy: ”` is the same as not having one.”

Cytat źródłowy: “unknown language,“

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.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.