Co oznacza to kryterium
Przed uruchomieniem linku użytkownik powinien móc rozpoznać, dokąd lub do jakiej informacji prowadzi. Cel może wynikać z tekstu linku albo z tekstu wraz z kontekstem dostępnym programowo. „Czytaj więcej” może więc wystarczyć, jeżeli odbiornik potrafi przedstawić właściwy opis razem z linkiem. Sama bliskość na obrazie takiej relacji nie zapewnia.
Pomaga to osobom niewidomym odnaleźć cel bez wzrokowego łączenia kart, a słabowidzącym, gdy powiększony fragment nie obejmuje sąsiedniego opisu. Trafny wybór ogranicza przejścia i powroty osób z ograniczeniami ruchowymi oraz zgadywanie przy trudnościach z pamięcią i koncentracją. To redakcyjne uzasadnienia, bez badania użytkowników demonstracji.
Przykłady błędów i poprawek
Te same linki, różne programowe powiązania
Pracownia pokazuje poradniki „Godziny odbioru — punkt Ogrodowa 8” i „Zasady zwrotu — zamówienie P-104”. Dane są syntetyczne. Good i bad mają te same widoczne teksty, układ i cele. Good łączy każdy link „Czytaj więcej” z właściwym tematem przez aria-labelledby; bad ma opis i link w oddzielnych akapitach bez tego powiązania.
| Wariant | Struktura i ekspozycja | Ocena |
|---|---|---|
| Good | IDREF łączy tekst linku z tematem; AX podaje „Czytaj więcej Godziny odbioru — punkt Ogrodowa 8.” i „Czytaj więcej Zasady zwrotu — zamówienie P-104.” | Powiązanie potwierdzono w DOM i odbiorniku; znaczenie ocenione przez AI. |
| Bad | Najbliższy akapit zawiera tylko „Czytaj więcej”; brak właściwej listy/komórki/nagłówka karty. AX ma dwie ogólne nazwy. | Użytkownik widzący kojarzy temat przez układ, lecz programowa relacja nie została zapewniona; własne odtworzenie F63. |
| Control | Temat i link należą do jednego akapitu, bez ARIA; AX nadal pokazuje krótkie nazwy. | Struktura zapewnia kontekst H78; sam krótki tekst lub lista linków nie daje FAIL 2.4.4. Odczyt akapitu komendą czytnika niewykonany. |

Wspólny wygląd good/bad/control, surowy JPEG z 2026-10-03. Obraz nie dowodzi programowego powiązania.
Surowe JPEG listy good, bad i control są identyczne bajtowo; geometria linków też jest równa. Dlatego pokazujemy jeden wspólny kadr, a różnicę wyjaśnia tabela. Eksport AX nazywa udostępnioną wartość Description; nie jest to autorski aria-describedby, którego nie użyto. DOM/AX nie są nagraniem wypowiedzi VoiceOver.
Sprawdzenie rzeczywistego celu i oddzielenie przycisku
- Tab osiąga pierwszy link; Enter otwiera Godziny odbioru. Powrót prowadzi do listy.
- Kliknięcie drugiego linku otwiera Zasady zwrotu. W każdym wariancie oba odsyłacze mają te same rzeczywiste cele.
- „Oznacz jako przeczytane” zmienia lokalny stan/status i aria-pressed, bez opuszczenia listy. Drugie kliknięcie cofa stan, reload resetuje. To akcja przycisku, poza badanym warunkiem celu linku.

Cel nawigacji łączy się z historycznym odczytem URL, tytułu, treści i żądania wejścia.

Druga treść docelowa z tej samej finalnej próby, bez testu wypowiedzi czytnika.
Link „Godziny odbioru” prowadzący do zasad zwrotu wymagałby oceny rozbieżności, mimo opisowej nazwy. Tego dodatkowego wariantu nie wykonano. Niewykonanym przykładem interpretacyjnym F89 jest link obrazkowy bez dostępnego tekstu: dodaj alternatywę opisującą cel albo nazwę linku; obraz dekoracyjny wycisz, jeżeli tekst wystarcza. Nie badano częstości takich błędów.
Kiedy obowiązuje i gdzie są wyjątki
Tekst, nazwa i kontekst
Widoczny tekst, dostępna nazwa i programowy kontekst to różne dane. Nazwa może rozszerzać krótki tekst. Wspólny akapit może zapewnić kontekst bez zmiany samej nazwy. Kryterium nie wymaga ARIA ani samodzielnego opisu celu w każdym linku; to ostatnie ma odrębny zakres w 2.4.9 AAA.
Kontekst musi wynikać z relacji, która pozwala wydobyć i przedstawić informację razem z linkiem. Typowe przykłady HTML to zdanie/fraza, akapit, element listy, komórka i powiązane nagłówki tabeli. Nie wystarczy wspólne main, div, wizualna karta lub wiersz tabeli układu. H77/H78/H79/H81 opisują pomocnicze techniki tych relacji. Poprzedzający właściwy nagłówek może pomagać według doradczej H80; dowolny sąsiedni nagłówek nie daje bezwarunkowo wystarczającego powiązania. Globalne „Poradniki” nie rozróżnia celów tej pary.
G91/H30 opisują cel w tekście, ARIA7/ARIA8 i C7 rozszerzenie dostępnego tekstu. aria-labelledby zastępuje nazwę z zawartości: zachowaj w niej tekst widoczny, właściwe ID i kolejność. aria-describedby jest opisem, bez zastąpienia nazwy. Skuteczność kontekstu trzeba ocenić w odbiorniku. title ma ograniczenia dotyku, klawiatury i czytników; sam tooltip nie wystarczy. Ukryty tekst C7 musi pozostać dostępny, bez display:none lub aria-hidden.
Ogólna niejednoznaczność i zachowanie linku
Wyjątek zachodzi, gdy celu nie da się ustalić z linku i wszystkich informacji pokazywanych jednocześnie także użytkownikowi bez niepełnosprawności, np. w grze celowo ukrywającej zawartość za „Drzwi 1”. Jeżeli widoczny opis karty zdradza cel osobie widzącej, trzeba udostępnić go programowo. Wyjątek nie usprawiedliwia bad tego przykładu; gry i wyjątku nie testowano działaniem.
Cel musi odpowiadać zapowiedzianej informacji lub działaniu. Niepusty tekst, URI lub rola link nie potwierdzają trafności. Format, rozmiar pliku i nowe okno bywają przydatne, lecz 2.4.4 nie nakazuje dodawać wszystkich tych danych do każdego linku.
HTML a z href zapewnia nawigację hipertekstową, a button wykonuje akcję. Poza WWW liczy się zachowanie, bez rozstrzygania po wyglądzie lub typie widgetu. Sama rola link nie realizuje działania. Przycisk prowadzący do treści jak hipertekst nadal wymaga oceny celu; przycisk lokalnego zapisu lub oznaczania podlega innym wymaganiom.
Platformy
Ocena AI z 2026-10-03: WCAG 2.2 Recommendation 2024-12-12 dla stron, informacyjne WCAG2ICT Group Note 2025-12-11 poza WWW, bez zmiany wymagania. „Link” obejmuje kontrolkę zachowującą się jak hipertekst. Nie ustalano EN 301 549 ani obowiązków prawnych.
| Środowisko | Warunek | Wykonanie źródłowe |
|---|---|---|
| WWW, także telefon | Treść zawiera linki; sprawdź cel każdego. | Przeglądarka macOS. |
| Natywne mobile i desktop | Kontrolka zachowuje się jak link hipertekstowy, np. odsyłacz pomocy. Nie każdy przycisk jest linkiem. | Niewykonane. |
| Dokumenty | Dokument zawiera linki; potrzebny właściwy format i odbiornik, np. struktura Link PDF. | Niewykonane. |
| Kiosk webowy lub natywny | Część interfejsu zawiera linki; zamknięta funkcjonalność wymaga osobnej oceny udostępnienia tekstu/kontekstu. | Sprzęt i interfejs niewykonane. |
Oba poradniki uruchamiają warunek; lokalne oznaczanie przeczytania go nie uruchamia. Brak testu nie wyłącza platformy. W hybrydzie rozdziel treść webową i kontrolki natywne.
Rozwiązania w technologiach
WWW
<a href="?page=hours">Godziny odbioru</a><p id="topic-hours">Godziny odbioru — punkt Ogrodowa 8.</p>
<p>
<a id="link-hours" href="?page=hours" aria-labelledby="link-hours topic-hours"
>Czytaj więcej</a
>
</p><p>
Godziny odbioru — punkt Ogrodowa 8.
<a href="?page=hours">Czytaj więcej</a>
</p>Opisowy tekst jest najmniejszym rozwiązaniem. W good aria-labelledby łączy tekst linku i temat, a control wykorzystuje wspólny akapit. Treść demonstracji pochodzi z zamkniętej mapy i textContent/DOM; linki wykonują normalną nawigację bez przechwytującego JS. Dokumentacja/składnia PASS 2026-10-03; trzy warianty i oba cele wykonano.
Android / Compose
import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.withLink
@Composable
fun HoursLink(hoursUrl: String) {
BasicText(buildAnnotatedString {
withLink(LinkAnnotation.Url(hoursUrl)) { append("Godziny odbioru") }
})
}hoursUrl dostarcza zaufana konfiguracja celu. LinkAnnotation.Url obsługuje URI; zadbaj o styl, błędy otwarcia i ekspozycję hosta. Modifier.clickable na ogólnym tekście obok osobnego Text nie dowodzi kontekstu. Dokumentacja PASS; kompilacja, TalkBack i działanie niewykonane.
iOS / SwiftUI
import SwiftUI
struct HoursLink: View {
let hoursURL: URL
var body: some View {
Link("Godziny odbioru", destination: hoursURL)
}
}URL dostarcza zaufana konfiguracja. Link otwiera URL przez hosta; zmiana openURL musi zachować zapowiedziany cel. Lokalny Button i sąsiedni Text w VStack nie dowodzą kontekstu hipertekstu. Apple DocC przejrzano po niedostępnym odczycie strony w narzędziu web. Kompilacja, VoiceOver i działanie niewykonane.
Flutter
import 'package:flutter/cupertino.dart';
// W istniejącym buildzie; openHours to rzeczywista nawigacja do godzin odbioru.
Semantics(
link: true,
label: 'Godziny odbioru',
onTap: openHours,
excludeSemantics: true,
child: CupertinoButton(
onPressed: openHours,
child: const Text('Godziny odbioru'),
),
)Fragment w istniejącym buildzie dotyczy kontrolki zachowującej się jak hipertekst; openHours wykonuje tę samą rzeczywistą nawigację dla dotyku i dostępności. excludeSemantics usuwa rolę przycisku potomka: nie wyciszaj nim dodatkowej ważnej treści i nie kopiuj opakowania do zapisu lub oznaczania. Host obsługuje URL i błędy. Sąsiedni Text nie tworzy automatycznie akapitu HTML. Dokumentacja/mapping link przejrzane; nie kompilowano ani nie uruchamiano fragmentu i nie zmieniano aplikacji Fluttera.
React Native
import { Text } from 'react-native';
// W istniejącym renderowaniu: openHours naprawdę otwiera odpowiednią treść.
<Text accessibilityRole="link" onPress={openHours}>
Godziny odbioru
</Text>;openHours jest istniejącym callbackiem rzeczywistej nawigacji, z obsługą błędu. Rola opisuje kontrolkę, onPress działa, tekst podaje cel. Krótką nazwę możesz rozszerzyć accessibilityLabel, zachowując tekst widoczny. accessibilityHint jest wskazówką zależną od ustawień, bez pewnego zastąpienia celu; dwa Text w View nie są automatycznie akapitem. Dokumentacja PASS; typecheck, build, VoiceOver/TalkBack i działanie niewykonane.
Jak sprawdzić
- Rozpoznaj linki według struktury, roli i rzeczywistego zachowania. Oddziel lokalne akcje przycisków i ustal cel bez wykonywania niebezpiecznej operacji.
- Zbierz widoczny tekst, dostępną nazwę/opis i odpowiednią relację zdania, akapitu, listy, tabeli lub innego mechanizmu. Sprawdź IDREF i odbiornik; kolor i współrzędne nie dowodzą kontekstu.
- Oceń tekst z dopuszczonym kontekstem oraz wyjątek ogólnej niejednoznaczności na podstawie wszystkich jednocześnie dostępnych informacji. Nie wymagaj samodzielnej pełnej nazwy jako warunku 2.4.4.
- Porównaj zapowiedź z rzeczywistą treścią docelową i przekierowaniem. Sprawdź powroty i reset. Dla deklaracji odbioru czytnikiem wykonaj osobno listę linków, odczyt w kolejności i uzyskanie kontekstu bez zgubienia miejsca; tutaj niewykonane.
Weryfikacja i ograniczenia
Historyczna próba 2026-10-03 00:58:39–00:58:48 CEST: IAB na macOS 27.0, build 26A428, UA Chrome/154.0.0.0; viewport 1280 × 720 CSS px, DPR 1. UA maskuje system; silnik poza UA nieodczytany. Node 22.22.3/Python 3.9.6; bez mobilnych SDK, emulacji i zmian ustawień dostępności.
| Sprawdzenie | Rzeczywisty wynik źródła |
|---|---|
| Good/bad/control | Powiązanie i ekspozycja good PASS; bad odtwarza brak kontekstu; control potwierdza akapit. Praktyczny odbiór kontekstu przez czytnik niewykonany. |
| Nawigacja i reset | Tab/Enter do godzin, klik drugiego celu, oba powroty, lokalny stan i reload/fallback PASS. URL, tytuł/treść i nowy timeOrigin potwierdzają nawigację dokumentu. |
| Wejście i odczyty | 6 żądań klawisza, 15 kliknięć, 28 próbek DOM/AX. Tab i kliknięcia lokalne odebrane z isTrusted=true; nawigacyjne kliknięcia/Enter powiązano żądaniem i nowym dokumentem, bez deklaracji isTrusted utraconych zdarzeń starego dokumentu. |
| Media | Pięć JPEG obejrzanych; trzy listy identyczne bajtowo, równa geometria linków, bez retuszu/filmu/audio. |
| Składnia/hashe | Dwa node –check PASS, finalna konsola bez error/warn, kontrola dowodów i hashów PASS. |
Pierwsza próba wykonała interakcje, ale zatrzymała się przy innerText: akapity i bloki span dawały dodatkowe nowe linie. Check poprawiono o normalizację białych znaków, control o separator między tematem i linkiem. Wcześniejsze pięć kadrów zachowano poza finalnymi assetami, bez pełnego logu; nie zastępują końcowych dowodów. Finalna nowa próba przeszła również porównanie geometrii. Bind localhost wymagał eskalacji, bez awarii samej nawigacji.
Reguły mogą odczytać pustkę, IDREF, wspólny akapit/listę/komórkę, URI i działanie, lecz trafność dowolnej treści wymaga oceny. Check zna oczekiwane tematy demonstracji, bez pomiaru uogólnionej skuteczności. AX pokazuje ekspozycję w tym odbiorniku; uproszczona rola lokalnego aria-pressed button jako checkbox nie zmienia jego zachowania potwierdzonego w DOM.
AI może odrzucić poprawne krótkie linki z kontekstem lub przyjąć wspólną kartę jako relację. Brak struktury lub niedostępny cel pozostają nierozstrzygnięte. Uwzględnij uprawnienia, sesję i bezpieczeństwo przejścia; URL jest dowodem adresu, bez automatycznie dostatecznego opisu. Wyklucz warianty, obserwator, oczekiwania drivera i metadane z niezależnej walidacji.
Jak sprawdza Clearship
Metoda tekstowa z 2026-10-08 wyszukuje ogólne nazwy linków w natywnych obserwacjach aplikacji. Rozpoznaje kontekst tego samego zdania; kandydatów w zdaniu i odnośniki o nieznanym zakresie może ocenić AI z tekstem i obrazem. Niepewność, błąd i brak AI trafiają do człowieka. Dawny check ATF i ogólna ocena etykiet AI są poza planem tego kryterium.
Wersja deterministyczna wykryła 6/6 usterek, bez fałszywych alarmów na 32 poprawnych ekranach zestawu rozwojowego Androida oraz iOS (iOS 2026-10-09). Android z AI miał 6/6 i 3/32 fałszywych alarmów, poniżej progu rozwojowego. Pomiar kontrolny obu platform niewykonany; nie jest to potwierdzone pełne pokrycie.
Metoda może pomylić przycisk Fluttera z linkiem lub fokusowalny TextView ze spanem. Nie rozpoznaje pełnego kontekstu elementu listy/komórki tabeli, co może powodować fałszywy alarm dla poprawnej krótkiej nazwy. Nie bada celu po aktywacji, przekierowania, wyjątku ogólnej niejednoznaczności ani treści webowych. Opisowa nazwa prowadząca do błędnej treści może pozostać niewykryta. Ocenę dopuszczonego kontekstu i właściwego celu trzeba zachować osobno.