Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Kiedy dostaję do audytu stronę, która „ma zrobione SEO”, obrazki sprawdzam prawie na końcu. I prawie zawsze wygląda to tak samo: część zdjęć nie ma opisów alternatywnych w ogóle, część ma nazwę pliku typu „IMG_2841″, a część — te po kimś, kto „zoptymalizował” serwis — ma wklejoną listę fraz kluczowych oddzielonych przecinkami.
Atrybut alt jest jednym z najstarszych elementów HTML-a i jednocześnie jednym z najbardziej niezrozumianych. Traktuje się go jak pole na słowa kluczowe, a jego zadanie jest zupełnie inne: ma opisać obrazek osobie, która go nie zobaczy. Wyszukiwarka jest tu odbiorcą wtórnym, choć faktycznie z tego opisu korzysta.
W tym wpisie tłumaczę, czym alt jest technicznie, komu naprawdę służy, jak napisać sensowny opis i kiedy poprawną odpowiedzią jest zostawienie go pustym. Bez tabelek „ile znaków jest optymalne”, bo takiego progu nikt oficjalnie nie ogłosił.
Alt to atrybut znacznika obrazka, w kodzie HTML zapisywanego jako img. Umieszcza się w nim tekst alternatywny, czyli treść, która ma zastąpić obrazek wtedy, gdy obrazek nie jest dostępny albo nie jest widziany. Specyfikacja HTML traktuje go jako atrybut wymagany dla obrazków niosących treść. Nie jest opcjonalnym dodatkiem, choć przeglądarka nie zgłosi błędu, gdy go zabraknie.
Trzy sytuacje, w których ten tekst wchodzi do gry:
Warto od razu zaznaczyć, czego alt nie dotyczy. Grafiki wstawiane w CSS jako tło, przez własność background z adresem pliku, nie mają tego atrybutu w ogóle, bo nie są znacznikiem obrazka. To częsty problem na stronach, gdzie zdjęcia produktowe albo nagłówkowe wrzucono jako tła — dla czytnika ekranu i dla wyszukiwarki takich obrazków po prostu nie ma. Jeśli grafika jest treścią, powinna być wstawiona jako obrazek w HTML-u, nie jako tło w arkuszu stylów.
Kolejność jest tu odwrotna niż w większości poradników. Tekst alternatywny powstał dla ludzi i to jest jego główny sens.
Osoba niewidoma czy słabowidząca poruszająca się po stronie z czytnikiem ekranu dostaje serwis jako liniowy strumień treści. Nagłówki, akapity, linki, listy — i obrazki, o których czytnik może powiedzieć wyłącznie to, co znalazł w alt. Gdy atrybutu nie ma, część programów odczytuje nazwę pliku, co przy „dsc-4471-kopia-2.jpg” brzmi dokładnie tak żałośnie, jak wygląda. Gdy alt jest wypchany frazami, użytkownik wysłuchuje ciągu haseł, z których nie wynika nic.
Standardem, do którego się w tej sprawie odwołuję, jest WCAG. Wytyczne w wersji 2.1 obowiązują od 2018 roku, a kryterium sukcesu 1.1.1 dotyczące treści nietekstowych jest na najniższym, podstawowym poziomie A — czyli to absolutne minimum, nie ambitny cel. W Polsce dla podmiotów publicznych wymóg zgodności z WCAG na poziomie AA wynika z ustawy o dostępności cyfrowej z 2019 roku, więc urzędy, szkoły i szpitale mają to jako obowiązek prawny, a nie dobrą praktykę.
Firmy prywatne obowiązku w tej formie na razie nie mają, ale unijna dyrektywa o wymogach dostępności produktów i usług, przyjęta w 2019 roku, przewiduje stosowanie przepisów od 28 czerwca 2025 roku i obejmie m.in. handel elektroniczny. Zostały niecałe trzy lata i mam wrażenie, że mało kto w branży e-commerce w ogóle o tym słyszał. Warto porządkować opisy alternatywne teraz, przy okazji normalnej pracy nad stroną, a nie w pośpiechu przed terminem.
Google wykorzystuje alt do zrozumienia, co jest na obrazku, i traktuje go jako jeden z sygnałów przy dopasowywaniu grafiki do zapytania w wyszukiwarce obrazów. Robot nie ma oczu w naszym rozumieniu — analiza wizualna oczywiście istnieje i Google jej używa, ale opis tekstowy razem z otoczeniem obrazka na stronie nadal jest najprostszym i najpewniejszym źródłem informacji o temacie zdjęcia.
Drugi, mniej oczywisty efekt: alt jest tekstem, który liczy się w kontekście linku. Jeśli obrazek jest jednocześnie odsyłaczem — a tak wygląda większość kafelków produktowych i banerów — to jego opis alternatywny pełni rolę anchor textu. Obrazek-link bez alt to link bez treści. Widzę takie sytuacje na większości sklepów, które przejmuję: całe listingi kategorii linkują do produktów wyłącznie przez grafikę i przez pustą nazwę.
Trzeba za to od razu ostudzić oczekiwania. Uzupełnienie opisów alternatywnych na kilkuset zdjęciach nie jest dźwignią, która podniesie widoczność strony w klasycznych wynikach. To praca porządkowa: naprawia dostępność, poprawia szanse w wyszukiwarce grafiki i domyka linkowanie wewnętrzne przez obrazki. Traktowanie alt jak głównego pola do optymalizacji jest nieporozumieniem — a upychanie w nim fraz Google od dawna nazywa wprost zachowaniem spamerskim i jednym ze sposobów manipulowania wynikami.
Mam na to jeden test: zamknij oczy, wyobraź sobie, że ktoś czyta Ci ten tekst na głos, i sprawdź, czy wiesz, co jest na obrazku. Jeśli tak — opis jest dobry.
Kilka zasad, które stosuję u siebie:
Fraza kluczowa może się w alt znaleźć — pod jednym warunkiem: że pojawia się tam naturalnie, bo faktycznie opisuje zawartość zdjęcia. To zupełnie inna sytuacja niż dopisywanie jej na siłę do każdego pliku w galerii.
To fragment, który zaskakuje najwięcej osób. Nie każdy obrazek powinien mieć opis. Grafiki czysto dekoracyjne — separatory, ozdobne kształty w tle sekcji, ikonka obok napisu, który mówi to samo — powinny mieć atrybut alt wpisany, ale z pustą wartością, czyli alt=””.
Różnica między brakiem atrybutu a pustym atrybutem jest istotna. Brak atrybutu to dla czytnika ekranu sygnał „nie wiem, co to jest” i program próbuje coś powiedzieć, zwykle czytając nazwę pliku. Pusty alt to jednoznaczna informacja „ten obrazek nie niesie treści, pomiń go” — i czytnik go pomija. Pierwsze to zaniedbanie, drugie to decyzja.
Praktycznie stosuję to tak: przy ikonce w przycisku z widocznym napisem „Dodaj do koszyka” ikona dostaje pusty alt, bo jej opis tylko dublowałby treść przycisku. Ale przy przycisku, na którym jest wyłącznie ikona lupy, opis alternatywny musi opisywać funkcję, a nie kształt — „Szukaj”, nie „ikona lupy”.
Te cztery rzeczy mieszają się w panelach CMS-ów i warto je rozdzielić.
Atrybut title na obrazku wyświetla się jako dymek po najechaniu kursorem. Nie zastępuje atrybutu alt, nie jest dostępny na urządzeniach dotykowych, a czytniki ekranu obsługują go niekonsekwentnie. W praktyce zostawiam go pustym. W WordPressie osobnym polem jest też podpis, który renderuje się pod zdjęciem jako widoczny tekst — to zupełnie inna rola: widzą go wszyscy, więc nie jest alternatywą dla nikogo.
Nazwa pliku ma znaczenie — „fotel-biurowy-siatkowy.jpg” jest dla wyszukiwarki bardziej użyteczna niż „IMG_2841.jpg” — ale nie zwalnia z uzupełnienia alt. To dwa niezależne sygnały i tylko jeden z nich jest w ogóle dostępny dla użytkownika czytnika ekranu.
Osobna pułapka WordPressa: przy wgrywaniu pliku system wypełnia pole tytułu na podstawie nazwy pliku, a pole tekstu alternatywnego pozostawia puste. Wystarczy, że ktoś raz tego nie sprawdzi, i biblioteka mediów po roku pracy ma tysiąc obrazków bez opisów, a redaktorzy są przekonani, że „przecież tytuł jest wpisany”.
Nie ma sensu przeglądać wszystkiego ręcznie. Kolejność, którą stosuję przy audycie:
Na koniec rzecz organizacyjna, która decyduje o tym, czy praca ma trwały efekt. Uzupełnienie zaległości to jednorazowa akcja, a problem wraca z każdym nowym wpisem i każdym nowym produktem. Dlatego przy porządkowaniu opisów alternatywnych zawsze proszę o dopisanie jednego punktu do procedury dodawania treści: pole tekstu alternatywnego wypełnia się przy wgrywaniu pliku, a nie „kiedyś potem”. Bez tego za rok siedzimy w tym samym miejscu.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |