Złożony obraz młodego mężczyzny pokazujący ekran jego komputera typu tablet

3 mało znane rozwiązania HTML, które warto znać

7 min. czytania

HTML ma opinię „prostego” języka, ale od lat rośnie w nim liczba sprytnych, mało znanych rozwiązań, które realnie ułatwiają pracę – zwłaszcza gdy myślisz o dostępności, SEO i utrzymaniu kodu. W tym artykule przyjrzymy się trzem z nich: atrybutowi translate, znacznikowi <base> oraz atrybutowi ping w linkach.

1. translate – kiedy tekst nie powinien być tłumaczony

Atrybut translate to globalny atrybut HTML – możesz go dodać praktycznie do każdego elementu, a także do tagu <html>. Przyjmuje dwie wartości: translate="no" – nie tłumacz tego fragmentu, oraz translate="yes" – fragment może być tłumaczony (zwykle domyślne zachowanie).

Co robi translate?

Oto prosty przykład zablokowania tłumaczenia całego dokumentu:




To jest dokument, którego treść nie powinna być tłumaczona automatycznie.



Możesz też precyzyjnie chronić tylko wybrane fragmenty, np. nazwy produktów:

Kup nowego Apple iPhone 16 Pro już dziś!

W tym przykładzie cała strona może zostać przetłumaczona, ale nazwa produktu pozostanie w oryginale.

Typowe przypadki użycia

Najczęstsze scenariusze, w których translate="no" naprawdę pomaga:

  • Nazwy marek i produktów – utrzymanie spójnego nazewnictwa jest kluczowe dla identyfikacji marki; automatyczne tłumaczenia potrafią „spolszczać” lub odmieniać nazwy w sposób komiczny i nieprofesjonalny;
  • Fragmenty interfejsu technicznego – komendy CLI, nazwy klas, fragmenty kodu, parametry URL; tłumaczenie ich zwykle szkodzi zrozumieniu, np. git commit --amend;
  • Treści wielojęzyczne w obrębie jednego dokumentu – cytaty w oryginalnym języku, slogany reklamowe, hasła po łacinie itp.;
  • Dane użytkownika lub dynamiczne – nazwiska, nazwy użytkowników, identyfikatory, kody zamówień powinny pozostać bez zmian.

Jak to pomaga dostępności?

Spójność doświadczenia użytkownika: osoby korzystające z wbudowanych tłumaczeń widzą poprawnie pozostawione w oryginale nazwy marek, symbole i kody – to ułatwia np. kontakt z pomocą techniczną.

Lepsza współpraca z narzędziami tłumaczeniowymi: wiele narzędzi respektuje translate="no" i omija te fragmenty, co zmniejsza ryzyko błędów semantycznych.

W połączeniu z atrybutem lang możesz precyzyjnie kontrolować język poszczególnych fragmentów treści, co jest ważne dla czytników ekranu i zgodności z WCAG.

Przykład poprawnie oznaczonego cytatu obcojęzycznego:

Jak powiedział Steve Jobs:
Stay hungry, stay foolish.

lang="en" informuje czytniki ekranu o języku cytatu, a translate="no" zapobiega „spolszczeniu” kultowego zdania.

Dobre praktyki użycia translate

  • domyślnie pozwalaj tłumaczyć (atrybut pomijaj lub ustawiaj na yes),
  • używaj translate="no" oszczędnie i tylko tam, gdzie ma to realny sens,
  • dokumentację dla tłumaczy uzupełniaj informacją: „fragmenty oznaczone translate="no" pozostają bez zmian”,
  • nie stosuj translate="no" jako „blokady” dla całego serwisu wielojęzycznego – do tego służy struktura językowa i atrybut lang, a nie blokowanie tłumaczeń.

2. <base> – jedno miejsce, które zmienia wszystkie linki

Znacznik <base> istnieje od dawna, ale bywa niedoceniany. Działa „po cichu” w <head> i wpływa na interpretację wszystkich relatywnych adresów URL w dokumencie oraz na domyślny sposób otwierania linków.

Składnia i podstawowe zastosowania

<base> obsługuje dwa główne atrybuty: href – bazowy adres URL dla wszystkich relatywnych odwołań w dokumencie, oraz target – domyślny cel otwierania odnośników (_self, _blank itp.).

Przykład konfiguracji bazowego URL:






Zobacz artykuł
Okładka artykułu

Efekt: link href="artykul-1.html" zostanie zinterpretowany jako /blog/artykul-1.html, a obrazek src="images/cover.jpg" jako /blog/images/cover.jpg. Zauważ, że <base> działa nie tylko na <a>, ale również na img, script i link.

Globalne otwieranie linków w nowych kartach

Zamiast dopisywać target="_blank" do każdej kotwicy, możesz ustawić domyślne zachowanie raz w <head>:






Otworzy się w nowej karcie
Ten otworzy się w tej samej karcie

Wszystkie linki bez własnego target dziedziczą wartość z <base>, a pojedyncze odnośniki wciąż możesz nadpisać.

Uwaga: <base> jest „mocne” – i potrafi napsuć krwi

  • zmienia sposób interpretacji wszystkich relatywnych adresów, co ułatwia pomyłki ścieżek przy zagnieżdżonych katalogach,
  • możesz mieć tylko jedno <base> na dokument (przeglądarka bierze pod uwagę pierwszy taki element),
  • w aplikacjach SPA i przy zaawansowanym routingu często lepiej skonfigurować serwer lub framework niż polegać na <base>.

<base> a dostępność i doświadczenie użytkownika

Masowe otwieranie linków w nowych kartach (target="_blank") bywa problematyczne: łamie zasadę WCAG „przewidywalność działania” i może utrudnić orientację osobom korzystającym z czytników ekranu.

Jeśli już ustawiasz globalne _blank, wyraźnie to komunikuj (np. ikoną i tekstem „otwiera się w nowej karcie”) lub dodaj treść tylko dla czytników ekranu:



Dokument (otwiera się w nowej karcie)
, link otwiera się w nowej karcie

Nawigacja powinna być przewidywalna i nie zaskakiwać użytkownika.

Dobre praktyki użycia <base>

  • rozważ użycie href przy statycznych stronach w głębokiej strukturze katalogów,
  • korzystaj z href w plikach generowanych przez narzędzia do eksportu dokumentów (np. generatory dokumentacji),
  • używaj target ostrożnie – zwłaszcza _blank – i zawsze w parze z jasną komunikacją dla użytkownika,
  • dokumentuj w projekcie, że używasz <base>, bo łatwo je przeoczyć podczas debugowania „dziwnie” działających ścieżek.

3. ping – lekkie śledzenie kliknięć bez całej machiny JS

Wiele serwisów śledzi kliknięcia rozbudowanymi skryptami, co obciąża stronę i bywa kłopotliwe dla dostępności. HTML oferuje prostsze narzędzie: atrybut ping w linkach.

Co robi ping?

Atrybut ping dodasz m.in. do <a>. Zawiera on jeden lub kilka adresów, na które przeglądarka wyśle żądanie (HTTP POST) w momencie kliknięcia i przejścia pod główny adres href.

Przykład użycia w linku produktowym:



Zobacz produkt

Efekt: użytkownik trafia pod https://sklep.example/produkt-123, a przeglądarka równolegle wysyła dodatkowe żądanie pod https://moja-analiza.example/click-tracking z informacjami o kliknięciu (np. docelowy URL, referer). W atrybucie ping możesz podać kilka adresów, rozdzielając je spacją.

Po co to wszystko, skoro mamy JS i analitykę?

Najważniejsze korzyści z użycia ping to:

  • Mniej skomplikowanego JavaScriptu – redukujesz liczbę handlerów i zależności w kliencie;
  • Mniejsze ryzyko kolizji z dostępnością – linki zachowują się naturalnie, bez event.preventDefault() i ręcznego nawigowania;
  • Mniej opóźnień – nawigacja idzie bezpośrednio pod href, a śledzenie dzieje się równolegle;
  • Łatwiejsze wdrożenie w treściach generowanych – atrybut ping możesz doklejać po stronie serwera w artykułach, newsletterach czy listingach produktów.

ping a prywatność i bezpieczeństwo

  • dane o kliknięciach są wysyłane automatycznie na wskazane adresy, co stanowi formę zintegrowanego śledzenia,
  • część przeglądarek i narzędzi prywatności blokuje ping lub pozwala użytkownikowi go wyłączyć,
  • w kontekście RODO/GDPR traktuj to jak inne techniki śledzenia: informuj o śledzeniu, uwzględnij adresy ping w polityce prywatności i – zależnie od zakresu danych – rozważ uzyskanie zgody.

ping a dostępność

  • pozwala zachować czyste, semantyczne linki bez komplikowania ich zachowania przez JS,
  • nie zmienia działania klawiatury, czytników ekranu i nawigacji fokusowej – link pozostaje zwykłym odnośnikiem,
  • zmniejsza liczbę dodatkowych skryptów, które często przechwytują zdarzenia i utrudniają debugowanie.

Przykładowe użycie w menu nawigacyjnym:

Menu zachowuje się standardowo (ważne dla czytników ekranu i klawiatury), a jednocześnie rejestrujesz podstawowe statystyki kliknięć.

Dobre praktyki użycia ping

  • używaj ping jako uzupełnienia, a nie jedynego źródła kluczowych danych,
  • zapewnij jasną politykę prywatności oraz zgodność z przepisami dotyczącymi danych,
  • umożliwiaj rezygnację użytkownikom z tego typu śledzenia (np. ustawienie w preferencjach),
  • nie nadużywaj ping – traktuj go jako narzędzie do prostych statystyk kliknięć, a nie pełnego profilowania.