2.4.4Poziom A

Cel linku w kontekście

Link Purpose (In Context)

Cel linku wynika z tekstu lub tekstu wraz z kontekstem dostępnym programowo, poza przypadkami ogólnie niejednoznacznymi.

Komu pomaga
NiewidzenieSłabowidzenieOgraniczenia ruchowePamięć i koncentracja
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

Wersja
WCAG 2.2, wprowadzone w 2.0
Zasada / wytyczna
Funkcjonalność / 2.4
Stan researchu
Draft AI. Bez przeglądu człowieka.
Redakcja artykułu
· wersja robocza
Na tej stronie

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.
Lista poradników Pracowni: dwa tematy i dwa linki Czytaj więcej.

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

  1. Tab osiąga pierwszy link; Enter otwiera Godziny odbioru. Powrót prowadzi do listy.
  2. Kliknięcie drugiego linku otwiera Zasady zwrotu. W każdym wariancie oba odsyłacze mają te same rzeczywiste cele.
  3. „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.
Good po Tab i Enter: otwarte Godziny odbioru punktu Ogrodowa 8.

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

Good po kliknięciu drugiego linku: zasady zwrotu zamówienia P-104.

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ć

  1. Rozpoznaj linki według struktury, roli i rzeczywistego zachowania. Oddziel lokalne akcje przycisków i ustal cel bez wykonywania niebezpiecznej operacji.
  2. 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.
  3. 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.
  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.

Powiązane kryteria