Dokumentacja
Ustaw język strony
Ustaw język strony
Atrybut lang w znaczniku <html> mówi, w jakim języku napisana jest strona: <html lang="pl">. Czytniki ekranu wybierają na jego podstawie właściwy głos i wymowę; bez niego polską stronę czyta angielski głos i trudno ją zrozumieć. Przeglądarka decyduje na jego podstawie, czy zaproponować tłumaczenie, a wyszukiwarki traktują go jako jeden z sygnałów, do kogo strona jest skierowana.
To jeden atrybut, zwykle ustawiany w jednym miejscu dla całej witryny. Lista kontrolna strony ostrzega, gdy strona główna go nie ma.
Jaka powinna być wartość
Wartość to kod języka (BCP 47): dwuliterowe oznaczenie języka, w razie potrzeby z regionem.
| Wartość | Znaczenie |
|---|---|
en |
angielski |
en-GB, en-US |
angielski z regionem, gdy różnica ma znaczenie |
sl |
słoweński |
pl |
polski |
de-AT |
niemiecki w wersji austriackiej |
Częste błędy:
pl_PL,en_USz podkreślnikiem to nazwy lokalizacji na serwerze, a nie kody języka w HTML. Użyj łącznika:pl-PLalbo po prostupl.sito syngaleski, nie słoweński. Słoweński tosl.- Jedna wartość dla wszystkich języków. W witrynie wielojęzycznej polskie strony potrzebują
pl, a angielskieen;lang="pl"na każdej stronie jest na większości z nich błędne.
Lista kontrolna sprawdza tylko, czy atrybut istnieje. Czy wartość pasuje do treści, musisz potwierdzić sam.
Sprawdź sam
Zamiast example.com wpisz swoją stronę:
curl -s https://example.com | grep -io '<html[^>]*>'
Wynik powinien zawierać lang="…" z właściwym kodem, na przykład <html lang="pl">. W witrynie wielojęzycznej uruchom polecenie dla jednej strony w każdym języku.
Jak to naprawić
Wybierz, na czym zbudowana jest Twoja strona. Na większości platform język pochodzi z jednego ustawienia; we własnym kodzie to jedna linia w głównym szablonie.
WordPress
WordPress sam wypisuje atrybut na podstawie ustawienia Settings → General → Site Language, przez funkcję language_attributes() w motywie. Jeśli atrybutu brakuje, sprawdź dwie rzeczy.
1. Język witryny. Otwórz Settings → General, wybierz właściwy Site Language i kliknij Save Changes.
2. Motyw. Motywy blokowe (Twenty Twenty-Two i nowsze) zawsze go wypisują. Motyw klasyczny musi wywołać language_attributes() w header.php, a niektóre starsze lub tworzone na zamówienie motywy wypisują samo <html>. Otwórz header.php (w motywie potomnym, aby aktualizacja nie nadpisała zmiany) i popraw linię tak:
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
Witryny wielojęzyczne. WPML i Polylang przełączają język dla każdej strony przez tę samą funkcję, więc z motywem, który wywołuje language_attributes(), każde tłumaczenie dostaje własny kod bez dodatkowej konfiguracji. Jeśli wszystkie języki mają ten sam kod, wartość jest zapisana na sztywno w motywie: popraw header.php jak wyżej.
Następnie wyczyść pamięć podręczną stron (WP Rocket, LiteSpeed Cache, W3 Total Cache, cache Twojego hostingu).
Node.js i Next.js
Next.js, App Router. Znacznik <html> wypisuje główny layout. W app/layout.tsx (lub .js):
export default function RootLayout({ children }) {
return (
<html lang="pl">
<body>{children}</body>
</html>
);
}
Jeśli każdy język ma własną ścieżkę (app/[lang]/layout.tsx), weź wartość ze ścieżki. W Next.js 15 i nowszych params jest promise:
export default async function RootLayout({ children, params }) {
const { lang } = await params;
return (
<html lang={lang}>
<body>{children}</body>
</html>
);
}
Next.js, Pages Router. Z ustawieniem i18n w next.config.js Next.js sam ustawia lang. Bez niego ustaw go w pages/_document.js:
import { Html, Head, Main, NextScript } from 'next/document';
export default function Document() {
return (
<Html lang="pl">
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
Inne aplikacje Node.js (Express z silnikiem szablonów, Nuxt, Astro, SvelteKit): ustaw go tam, gdzie wypisywany jest znacznik <html>. W SvelteKit to src/app.html, w Astro główny layout, w Nuxt app.head.htmlAttrs w nuxt.config.
Laravel
Nowe projekty Laravel mają to już w szablonach, projekty zaczęte od własnego szablonu często nie. W głównym layoucie (na przykład resources/views/layouts/app.blade.php):
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
app()->getLocale() to język aplikacji z config/app.php (APP_LOCALE w .env) albo ten, który dla żądania ustawia Twój middleware językowy. str_replace zamienia lokalizację w rodzaju pl_PL na poprawne pl-PL.
Statyczny HTML
Każdy plik HTML zaczyna się od tego samego znacznika. Dodaj do niego atrybut na każdej stronie:
<!DOCTYPE html>
<html lang="pl">
Jeśli stronę buduje generator (Hugo, Jekyll, Eleventy), zmień to raz w szablonie bazowym. W Hugo ustaw languageCode w konfiguracji witryny i użyj <html lang="{{ site.Language.LanguageCode }}"> w szablonie bazowym.
Shopify
Motywy Shopify wypisują atrybut na podstawie języka sklepu: Dawn i inne aktualne motywy używają <html lang="{{ request.locale.iso_code }}">. Języki ustawia się w Settings → Languages.
Jeśli go brakuje, motyw został zmodyfikowany albo jest stary. Otwórz Online Store → Themes → … → Edit code, znajdź layout/theme.liquid i zmień znacznik <html> na:
<html lang="{{ request.locale.iso_code }}">
Wix
Wix wypisuje atrybut na podstawie języka witryny, a z Wix Multilingual przełącza go dla każdego języka. Znacznika <html> nie można edytować. Jeśli lista kontrolna pokazuje zły język, zmień język witryny w ustawieniach językowych w panelu; jeśli nie pokazuje żadnego, skontaktuj się z pomocą Wix.
Webflow
Webflow bierze wartość z głównej lokalizacji witryny: w Site settings → Localization ustaw główną lokalizację (primary locale) i opublikuj witrynę ponownie. Z Webflow Localization każda lokalizacja dostaje na swoich stronach własny kod.
Squarespace
Squarespace wypisuje atrybut na podstawie języka witryny w Settings → Language & Region. Jeśli jest błędny, zmień go tam. Znacznika <html> nie można edytować bezpośrednio.
Potwierdź poprawkę
Uruchom ponownie polecenie curl z sekcji Sprawdź sam, potem otwórz cel w PulseKeeper i kliknij Sprawdź teraz na zakładce Lista kontrolna. Pozycja zmieni się na OK w ciągu kilku minut, a nie dopiero przy kolejnym codziennym sprawdzeniu.