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.
Języki
1 sygnał dowodowy na tej stronie
- Powiązane działające narzędzieOn-Page SEO Checker
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 — Atrybut HTML
lang—lang="en"w otwierającym tagu<html>strony — mówi przeglądarkom i czytnikom ekranu, w jakim języku napisana jest treść strony. Łatwo pomylić go z hreflang, ale to różne rzeczy:langopisuje tę stronę, a hreflang wskazuje inne wersje językowe. Google nie używalangdo wykrywania języka strony, choć atrybut nadal ma znaczenie dla dostępności i dla tego, czy przeglądarka zaproponuje tłumaczenie strony.
Czym jest atrybut lang
Niemal na samym początku większości stron internetowych znajduje się tag wyglądający tak:
<html lang="en">To lang="en" jest atrybutem HTML lang. Jego jedynym zadaniem jest zadeklarowanie języka, w którym napisana jest treść strony — en oznacza angielski, es hiszpański, a de niemiecki. Możesz doprecyzować wartość regionem: en-US dla angielskiego amerykańskiego, en-GB dla brytyjskiego i pt-BR dla portugalskiego brazylijskiego.
To drobiazg, ale odczytuje go kilka różnych systemów:
- Czytniki ekranu używają go do prawidłowej wymowy słów — angielski głos czytający francuski tekst brzmi jak nonsens. 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
- Przeglądarki używają go (wraz z rzeczywistym tekstem), aby zdecydować, czy wyświetlić „Przetłumaczyć tę stronę?”.
- Google w większości go ignoruje (więcej o powodach w karcie Advanced).
Cytat źródłowy: “Translate this page?“
lang to nie hreflang
To nieporozumienie kieruje większość osób na stronę taką jak ta. Oto różnica w jednym wierszu:
lang= „treść tej strony jest w tym języku”. Jedna wartość ustawiona w tagu<html>.- hreflang = „oto inne URL-e, które są niemiecką, hiszpańską i francuską wersją tej strony”. Zestaw linków wskazujących na inne strony.
Cytat źródłowy: “the content on this page is in this language.”
Cytat źródłowy: “here are the other URLs that are the German, Spanish, and French versions of this page.”
lang to samoopis. Hreflang to mapa stron alternatywnych. Prosta witryna jednojęzyczna potrzebuje prawidłowego lang i w ogóle nie potrzebuje hreflang. Jeśli prowadzisz witrynę wielojęzyczną, będziesz mieć oba — i powinny być ze sobą zgodne.
Jakiej wartości użyć?
Użyj prawdziwego kodu języka, a nie czegoś wymyślonego:
- Samego języka, jeśli nie interesują Cię warianty regionalne:
en,es,fr. - Języka z regionem, jeśli Cię interesują:
en-US,en-GB,pt-BR.
Nie wymyślaj kodów takich jak eng ani en-UK (prawidłowy kod Wielkiej Brytanii to GB, nie UK). Nie pozostawiaj też domyślnego lang="en" na stronie, której treść nie jest faktycznie po angielsku — to najczęstszy błąd i powoduje rzeczywiste problemy z podpowiedziami tłumaczenia oraz czytnikami ekranu.
Chcesz poznać głębszą wersję — dlaczego Google to ignoruje, jak używa tego Bing, jakie są zasady dostępności i jak działa automatyczne tłumaczenie w przeglądarce? Przejdź do karty Advanced.
TL;DR —
langdeklaruje naturalny język tego dokumentu (<html lang="en">albo wariant regionalny, taki jaken-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 HTMLlangjest 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ń szablonowelang="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 PageCytat ź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 nieen-UK(subtag regionu dla Wielkiej Brytanii toGB). 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 lokalnielangna elemencie zawierającym rzeczywistą zmianę języka. Nie myl tej deklaracji w dokumencie z nagłówkiem odpowiedzi HTTPContent-Language: nagłówek opisuje metadane transportowe odpowiedzi, a nie sparsowany dokument, i nie zastępujelangprzy 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?
langto 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.”
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”
- Metatag
content-languagew<head>(<meta http-equiv="content-language" content="en-us">). - 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>”. - ccTLD.
- 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.
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, nieUK. - 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ąlangnajbliż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
langstrony mówies-MX, a adnotacja hreflang tego samego URL-a mówien, 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ęlangtego 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
langpoprawi moje pozycje w Google”. Nie. Google stwierdza, że w ogóle nie używalangdo 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. - „
langi hreflang to zasadniczo to samo”. Nie —langopisuje stronę, na której się znajduje; hreflang wskazuje inne URL-e. Strona może mieć prawidłowylangbez hreflang albo prawidłowy hreflang i błędnylang. - „Żadna wyszukiwarka nie interesuje się
lang”. Bing jawnie się nim interesuje (jako sygnałem zastępczym zacontent-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
langdaje 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 braklang”. 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.
Podsumowanie AI
Skrócona wersja karty Advanced:
langdeklaruje język tego dokumentu (<html lang="en">albo wariant regionalny, taki jaken-US) za pomocą tagu BCP 47. To samoopis, a nie mechanizm targetowania ani routingu.- To nie hreflang. Własna dokumentacja Google wymienia oba jako elementy, których nie używa do wykrywania języka: “Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page… we use algorithms.”
langopisuje stronę, na której się znajduje; hreflang wskazuje URL-e z alternatywnymi językami. - Google ignoruje
langprzy wykrywaniu — Mueller: “we don’t use that at all… almost always wrong”, ponieważ wartości domyślne boilerplate’ów i CMS-ów są niewiarygodne na dużą skalę. Jeden wyjątek: oznaczanie bloków tłumaczonych maszynowo za pomocąlang="es-x-mtfrom-en". - Bing robi odwrotnie: jego Webmaster Blog z 2011 r. wymienia
<html lang>jako zastępczy sygnał lokalizacji dokumentu, za metatagiemcontent-language(kolejność: meta > html > title). Przy ruchu z Binga ustawlangprawidłowo. - Prawdziwą stawką jest dostępność: WCAG 3.1.1 tego wymaga;
langwpływa na wymowę czytnika ekranu,hyphens: auto, sprawdzanie pisowni i fonty CJK. „Missing document language” nadal występuje na około 13,5% stron głównych — to jeden z sześciu najczęstszych błędów WebAIM Million, choć wskaźnik spada. - Przeglądarki używają go przy podpowiedzi automatycznego tłumaczenia — błędna wartość powoduje pomyłki (błąd ORF.at z niemiecką treścią i
lang="en", który „przetłumaczył” nazwę dzielnicy na „lies”). - Ustaw go poprawnie: prawidłowy tag BCP 47 (
GB, nieUK), lokalnie resetujlangprzy obcych zwrotach, usuń szablonowelang="en"ze stron nieanglojęzycznych i zachowaj zgodnośćlangz hreflang (problem audytowy „Hreflang and HTML lang mismatch”).
Cytat źródłowy: “Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page… we use algorithms.”
Cytat źródłowy: “we don’t use that at all… almost always wrong,”
Cytat źródłowy: “Missing document language”
Cytat źródłowy: “translated”
Cytat źródłowy: “lies”
Cytat źródłowy: “Hreflang and HTML lang mismatch”
Oficjalna dokumentacja
Dokumentacja źródeł pierwotnych i odwołania do standardów.
- Zlokalizowane wersje stron — zdanie „Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page”.
- Tłumaczone wyniki wyszukiwania Google — konwencja oznaczania tłumaczenia maszynowego
lang="x-mtfrom-"i wyłączenienotranslate. - Zarządzanie witrynami wieloregionalnymi i wielojęzycznymi — kontekst sygnałów języka i regionu.
Cytat źródłowy: “Google doesn’t use hreflang or the HTML lang attribute to detect the language of a page”
Bing / Microsoft
- Jak powiedzieć Bingowi, jaki jest kraj i język witryny (Bing Webmaster Blog, 2011) — kolejność ważności lokalizacji dokumentu
meta > html > title. Oryginalny URL usunięto; tekst potwierdza zrzut Wayback Machine.
Standardy i materiały techniczne
- MDN — globalny atrybut
lang— wymaganie BCP 47, zachowanie pustego ciągu i braku wartości, dziedziczenie oraz odniesienia do WCAG. - W3C Internationalization — deklarowanie języka w HTML-u — wytyczne BCP 47/rejestru IANA i zasady elementów zagnieżdżonych dla treści mieszanojęzycznej.
- Deque University — reguła axe
html-has-lang— klasyfikacja WCAG 2,0/2,1 Level A stojąca za audytem dostępności Lighthouse. - WebAIM Million — coroczne badanie dostępności z odsetkiem błędu „missing document language”.
Cytat źródłowy: “missing document language”
Cytaty ze źródła
Wypowiedzi z podanymi autorami. Każdy link prowadzi bezpośrednio do cytowanego fragmentu, gdy strona źródłowa go wspiera.
Google — nie używa lang do wykrywania
- “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.” — dokumentacja Google Search Central. Przejdź do cytatu
Google — wyjątek dla tłumaczenia maszynowego i 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łumaczone wyniki wyszukiwania Google. Przejdź do cytatu
John Mueller, Google — „almost always wrong”
Cytat źródłowy: “almost always wrong”
- “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.” — za omówieniem Search Engine Roundtable z hangoutu Google Webmaster z 2016 r. Przeczytaj omówienie Przekazane za pośrednictwem tekstu Barry’ego Schwartza opisującego hangout z 2016 r. (oryginalne nagranie nie jest niezależnie dostępne). Bieżąca dokumentacja Search Central cytowana powyżej niezależnie potwierdza zasadę „nie używamy lang do wykrywania”, dlatego traktuję stanowisko jako nadal aktualne mimo wieku cytatu.
Cytat źródłowy: “we don’t use lang for detection”
Bing / Microsoft — lang jako zastępczy sygnał targetowania
- Kolejność sygnałów lokalizacji dokumentu: “the priority order for these tags is:
<meta>,<html>,<title>,” wraz z zaleceniem “use one option, instead of multiple options here.” — Bing Webmaster Blog, „How To Tell Bing Your Website’s Country and Language”, 2011. Cytat z wpisu z 2011 r. przekazany za zrzutem Wayback Machine — oryginalny URL usunięto z bieżącego archiwum Binga, a nie znalazłem nowszego stanowiska Binga, które zastępowałoby ten mechanizm. Wiek (2011 r.) jest rzeczywistym zastrzeżeniem; cytuję go jako stare, długotrwałe zalecenie.
Cytat źródłowy: “How To Tell Bing Your Website’s Country and Language,”
Ja — zachowanie zgodności lang i hreflang
- “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.” — z przewodnika Ahrefs dotyczącego hreflang, w części o problemie audytowym „Hreflang and HTML lang mismatch”. Przeczytaj
Cytat źródłowy: “Hreflang and HTML lang mismatch”
Zdanie przypisane mnie pochodzi z przewodnika Ahrefs dotyczącego hreflang, przy którym jestem wymieniony, i zostało odtworzone jako moje słowa. Wypowiedzi Google i Binga są cytowane z odpowiednich źródeł wskazanych powyżej; cytat Binga pochodzi z wpisu z 2011 r. zachowanego w Wayback Machine.Jakiego tagu języka naprawdę potrzebuję?
Krótki przewodnik na sytuację, w której patrzysz na stronę i nie wiesz, co ustawić.
1. Chcesz tylko zadeklarować, w jakim języku jest ta strona?
To atrybut lang. Ustaw <html lang="…">. Przejdź do kroku 2.
2. Czy musisz rozróżniać warianty regionalne (angielski amerykański i brytyjski, portugalski brazylijski i europejski)?
- Nie → użyj samego subtagu języka:
<html lang="en">,lang="es",lang="pt". - Tak → użyj języka z regionem:
<html lang="en-US">,lang="en-GB",lang="pt-BR". (Region toGB, nieUK.)
Element kodu źródłowego: lang="pt">
Element kodu źródłowego: lang="en-GB">
Element kodu źródłowego: lang="pt-BR">
3. Czy strona zawiera fragmenty w innym języku (francuski cytat w angielskim artykule)?
- Tak → opakuj je i zresetuj lokalnie:
<span lang="fr">c'est la vie</span>. Wszystko inne dziedziczy główny<html lang>. - Nie → wartość główna obejmuje całą stronę.
4. Czy masz tę samą stronę także pod innymi URL-ami w innych językach?
- Tak → potrzebujesz dodatkowo hreflang — osobnego mechanizmu wskazującego te alternatywne URL-e. Zachowaj zgodność
langkażdej strony z jej wpisem hreflang. (Zobacz pogłębienie hreflang; to osobny proces wdrożenia.) - Nie → dla
langjesteś gotowy.
5. Czy treść jest tłumaczona maszynowo?
- Tak → zgodnie z Google oznacz przetłumaczony blok:
lang="<target>-x-mtfrom-<source>"(np.lang="es-x-mtfrom-en"). - Nie → wystarczy zwykły tag BCP 47.
6. Czy ruch z Binga ma dla Ciebie znaczenie?
- Tak → ustaw
langpoprawnie i rozważ pasujący metatagcontent-language— Bing nadaje metatagowi wyższy priorytet niż<html lang>. Wybierz jedną spójną wartość; nie ustawiaj sprzecznych. - Nie →
langna<html>i poprawność dostępności wystarczą.
Ściąga atrybutu lang
lang kontra hreflang — różnica w jednej linii
lang | hreflang | |
|---|---|---|
| Deklaruje | Język treści tej strony | Inne URL-e będące wersjami w innych językach |
| Forma | Jedna wartość na <html> (albo dowolnym elemencie) | Zestaw adnotacji <link rel="alternate"> (albo sitemap/nagłówek) |
| Czy używa tego Google? | Nie (ignoruje przy wykrywaniu) | Tak — do kierowania właściwego wariantu URL-a |
| Czy używa tego Bing? | Tak — zastępczy sygnał targetowania | Ledwie |
| Dostępność / podpowiedź tłumaczenia? | Tak | Nie |
Kto odczytuje <html lang>
| Odbiorca | Co z tym robi |
|---|---|
| Ignoruje przy wykrywaniu języka (zamiast tego używa algorytmów) | |
| Bing | Zastępczy sygnał targetowania, za metatagiem content-language |
| Czytniki ekranu | Wybór wymowy/głosu (WCAG 3.1.1) |
| Przeglądarki | Jeden z danych wejściowych podpowiedzi automatycznego tłumaczenia |
| CSS / spellcheck | hyphens: auto, sprawdzanie pisowni, cudzysłowy, fonty CJK |
Prawidłowe wartości
- Tylko język:
en,es,fr,de - Język z regionem:
en-US,en-GB,pt-BR,zh-Hans - Nieprawidłowe:
eng(trzy litery),en-UK(użyjGB), pełne nazwy języków lang=""= „unknown” (rzeczywisty stan, inny niż brak)- Blok tłumaczony maszynowo:
lang="es-x-mtfrom-en"
Cytat źródłowy: “unknown”
Szybkie fakty
- Mueller:
langjest “almost always wrong” — Google ignoruje go przy wykrywaniu. - Kolejność Binga: meta
content-language><html lang>><title lang>. - „Missing document language” ≈ 13,5% stron głównych (WebAIM Million, jeden z sześciu najczęstszych błędów, wskaźnik spada).
html-has-langw Lighthouse znajduje się w kategorii Accessibility, a nie SEO.- Zachowaj zgodność
langz hreflang — to problem audytowy „Hreflang and HTML lang mismatch”.
Cytat źródłowy: “Missing document language”
Cytat źródłowy: “Hreflang and HTML lang mismatch”
Błędy HTML lang
- Pozostawianie
lang="en"w każdym zlokalizowanym szablonie. Ustawiaj język na podstawie rzeczywistej lokalizacji dokumentu i testuj trasy nieanglojęzyczne. - Używanie
langzamiast hreflang.langopisuje ten dokument, a hreflang łączy alternatywne URL-e. Wdrażaj każdy mechanizm do jego własnego zadania. - Dodawanie kodu kraju niepasującego do treści. Użyj prawidłowego tagu BCP 47 i dodawaj region tylko wtedy, gdy wariant języka jest rzeczywiście regionalny.
- Umieszczanie atrybutu na wrapperze zamiast na głównym
<html>. Deklaruj podstawowy język strony na elemencie dokumentu; lokalnych wartościlangużywaj dla fragmentów w innym języku. - Zakładanie, że Google potrzebuje
langdo wykrywania języka. Zachowaj go dla dostępności, przeglądarek, Binga i standardów — nie jako dźwignię rankingową Google.
Czytnik ekranu używa błędnej wymowy
Prawdopodobna przyczyna: brakujący, nieprawidłowy lub błędny główny język; fragmenty obcojęzyczne również mogą nie być oznaczone. Naprawa: ustaw prawidłową wartość BCP 47 na <html> i lokalne nadpisania w miejscach zmiany języka. Potwierdzenie: sprawdź drzewo dostępności i przetestuj odpowiedni głos czytnika ekranu.
Każda zlokalizowana strona mówi lang="en"
Prawdopodobna przyczyna: szablon bazowy albo mapowanie lokalizacji zakodowane na stałe, które nigdy nie dociera do powłoki dokumentu. Naprawa: wyprowadź wartość główną z lokalizacji trasy/treści po stronie serwera albo podczas budowania. Potwierdzenie: zcrawlować reprezentatywne URL-e lokalizacji i porównać zadeklarowany język z widoczną treścią.
lang i hreflang się nie zgadzają
Prawdopodobna przyczyna: osobne mapy lokalizacji, nieprawidłowe kody regionów albo wartość zastępcza szablonu. Naprawa: użyj jednej znormalizowanej konfiguracji lokalizacji, zachowując różne cele obu sygnałów. Potwierdzenie: każda strona deklaruje własny język treści, a jej alternatywne linki wskazują prawidłowe, wzajemne warianty.
Podpowiedzi tłumaczenia w przeglądarce są błędne
Prawdopodobna przyczyna: zadeklarowany język nie zgadza się z dominującą widoczną treścią albo bloki mieszanojęzyczne nie są zakresowane. Naprawa: popraw deklarację główną i oznacz większe fragmenty własnym lang. Potwierdzenie: kontrole przeglądarki i dostępności rozpoznają zamierzony język główny.
Narzędzia do deklarowania języka
- On-Page SEO Checker pokazuje surowy język dokumentu obok innych sygnałów HTML.
- hreflang Generator + Linter sprawdza kody i relacje alternatywnych języków; używaj go obok audytu głównego
lang, a nie zamiast niego. - DevTools przeglądarki pokazują wartość głównego
<html lang>i drzewo dostępności używane przez technologię wspomagającą. - Crawler z ekstrakcją XPath może porównywać deklarację w szablonach lokalizacji:
string(/html/@lang).
Zasoby warte uwagi
Moje powiązane teksty
- Hreflang: prosty przewodnik dla początkujących — pogłębienie hreflang, przy którym jestem wymieniony, w tym problem audytowy „Hreflang and HTML lang mismatch” łączący
langz hreflang. - Przewodnik technicznego SEO dla początkujących — miejsce HTML-u i sygnałów międzynarodowych w szerszym obrazie.
Cytat źródłowy: “Hreflang and HTML lang mismatch”
Moje wystąpienia
- Jak działa wyszukiwarka (SlideShare) — moje omówienie crawlowania, renderowania, indeksowania i rankingu, w tym sposobu, w jaki Google odczytuje (i normalizuje) znaczniki. (Obowiązuje moje stałe zastrzeżenie: “This is my understanding of systems… not going to be 100% complete or accurate.”)
Oficjalne
- Google — Zlokalizowane wersje stron oraz Tłumaczone wyniki wyszukiwania Google.
- Bing — Jak powiedzieć Bingowi, jaki jest kraj i język witryny (2011, przez Wayback Machine).
Z całej branży
- MDN — globalny atrybut
lang— ostateczne źródło techniczne: BCP 47, pusta wartość kontra brak i dziedziczenie. - W3C — Deklarowanie języka w HTML-u — instrukcja organizacji standaryzacyjnej, w tym strony mieszanojęzyczne.
- Deque — reguła axe
html-has-lang— reguła dostępności stojąca za audytem Lighthouse. - WebAIM Million — coroczne badanie z bieżącym wskaźnikiem błędu „missing document language”.
- Adrian Roselli — On Use of Lang Attribute — pogłębiony katalog dostępności pokazujący, na co faktycznie wpływa
lang. - Manuel Matuzovic — the lang attribute: browsers telling lies — studium przypadku automatycznego tłumaczenia ORF.at z
lang="en"na treści niemieckiej. - Google: We Ignore The HTML lang Attribute (Search Engine Roundtable) — pełny cytat Muellera „almost always wrong”.
- r/TechSEO — społeczność do debugowania znaczników, internacjonalizacji i audytów.
Cytat źródłowy: “missing document language”
Cytat źródłowy: “almost always wrong”
Sprawdź się: atrybut HTML lang
Pięć krótkich pytań o tym, co robi lang i czym różni się od hreflang. Wybierz odpowiedź na każde pytanie, a następnie sprawdź wynik.
Dziennik zmian
Zaktualizowano 18 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.