2.4.6Poziom AA

Nagłówki i etykiety

Headings and Labels

Obecne nagłówki i etykiety opisują temat lub cel sekcji, pola i działania z uwzględnieniem kontekstu.

Komu pomaga
NiewidzenieSłabowidzeniePamięć 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

Nagłówek pomaga przewidzieć, o czym jest następująca treść, a etykieta — do czego służy pole lub działanie. Jeżeli napis zapowiada godziny, a sekcja zawiera wyłącznie adres, użytkownik otrzymuje mylną wskazówkę. Krótki napis może wystarczyć, gdy otaczający kontekst jasno wyjaśnia jego znaczenie; kryterium nie wymaga długich ani zawsze unikalnych etykiet.

Potrzeba / ID Konkretna korzyść
Niewidzenie / blindness Trafny nagłówek ułatwia wybór sekcji w nawigacji czytnika, jeśli struktura została udostępniona; trafna etykieta pomaga wybrać właściwe pole lub działanie.
Słabowidzenie / low-vision Przy oglądaniu małego fragmentu strony jasny opis ogranicza poszukiwanie właściwej treści.
Pamięć i koncentracja / cognitive Przewidywalny temat i cel zmniejszają potrzebę domyślania się oraz zapamiętywania szczegółów formularza.

Przykłady błędów i poprawek

Pracownia udostępnia lokalne wyszukanie punktu odbioru według syntetycznego kodu P-104. Treść sekcji zawsze brzmi: „Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.” Pole jest zwykłym polem tekstowym. Aktywacja przycisku dla P-104 zawsze pokazuje „P-104: ul. Przykładowa 12, wejście od ogrodu.” Nie ma w tej funkcji adresu e-mail ani godzin otwarcia.

Element Poprawny good Błędny bad Kontrola control
Nagłówek Miejsce odbioru Godziny odbioru Odbiór
Etykieta pola Kod odbioru Adres e-mail Kod
Etykieta przycisku Pokaż adres Pokaż godziny Adres
Treść, dane, działanie Stały punkt i adres dla P-104 Ta sama treść i działanie Ta sama treść i działanie

Jedyną istotną różnicą pary good–bad są trzy istniejące opisy. Typ kontrolki, relacja nazwy, callback i dane są wspólne. W mobilnej karcie układ i rozmiary pola, sekcji oraz przycisku są identyczne; długość tekstu zmienia szerokość samych liter. W WWW tekstowy przycisk ma naturalnie różne szerokości: good 116,8125, bad 134,328125 CSS px, przy tych samych stylach i funkcji. Oznaczenie wariantu i narzędzia researchu znajdują się poza badaną kartą.

Błędy i poprawki

  1. Mylący nagłówek: „Godziny odbioru” prowadzi do tekstu zawierającego adres i instrukcję wejścia. Osoba szukająca godzin wybiera niewłaściwą sekcję. Poprawka: „Miejsce odbioru”, przy identycznej treści poniżej.
  2. Myląca etykieta pola: „Adres e-mail” zapowiada e-mail, chociaż pole służy do wyszukania kodu odbioru. Wpisanie rzeczywistego e-maila nie realizuje tej funkcji. Poprawka: „Kod odbioru”, bez zmiany pola i danych.
  3. Myląca etykieta działania: „Pokaż godziny” zapowiada wynik o godzinach, a przycisk ujawnia adres. Poprawka: „Pokaż adres”, bez zmiany callbacku i rezultatu.

To ocena AI na podstawie treści, wykonanej interakcji i kontekstu. XCTest sprawdza odtworzenie stanów, a nie samodzielne rozumienie języka. Nie są to dane o częstości takich błędów w produktach.

Kontrole bez naruszenia badanego warunku

„Odbiór”, „Kod” i „Adres” mają sens przy widocznej treści punktu odbioru i funkcji pokazania adresu. Ocena AI: w tym konkretnym kontekście krótkość nie powoduje usterki 2.4.6. Nie należy kopiować tej oceny do formularza bez kontekstu.

Minimalny WWW dodatkowo pokazuje widoczne grupy „Dostawa” i „Rozliczenie”, każda z polami „Imię” i „Ulica”. Wpisano różne syntetyczne dane: Ola / Przykładowa 12 i Jan / Testowa 8. Wynik rzeczywiście zachował przypisanie do obu grup. Widoczne legendy wyjaśniają rolę powtórzonych etykiet; każda etykieta pozostaje programowo powiązana z własnym polem. Kontrola ta uzupełnia mobilną kontrolę krótkich napisów.

iOS Simulator: poprawny nagłówek Miejsce odbioru, Kod odbioru i Pokaż adres przed wpisaniem

Start good po nieznanej trasie: Miejsce odbioru, Kod odbioru i Pokaż adres zapowiadają tę samą funkcję. Surowy zrzut XCTest z 2026-10-04, Flutter/iOS Simulator.

iOS Simulator: błędny nagłówek Godziny odbioru, Adres e-mail i Pokaż godziny przy tym samym opisie miejsca

Bad przed wpisaniem: Godziny odbioru, Adres e-mail i Pokaż godziny mylą użytkownika, mimo tej samej treści miejsca. Surowy kadr iOS Simulator z 2026-10-04.

iOS Simulator: przycisk Pokaż godziny ujawnił adres dla wpisanego kodu P-104

Bad po wpisaniu P-104 i dotknięciu Pokaż godziny ujawnia adres. Kadr z 2026-10-04 pokazuje rozbieżność opisu i wyniku; interakcję potwierdza źródłowy zapis wejść.

WWW: dwa zestawy pól Imię i Ulica pod widocznymi grupami Dostawa oraz Rozliczenie, z wynikiem obu zestawów

Dostawa i Rozliczenie zachowały różne dane po Pokaż adresy. Surowy JPEG przeglądarki Codex/macOS z 2026-10-04 obejmuje fragment strony; obszar poza kadrem nie jest dowodem tego obrazu.

Kiedy obowiązuje i gdzie są wyjątki

Normatywny warunek dotyczy opisowości obecnych nagłówków i etykiet. Nie ustanawia obowiązku dodania nagłówka do każdej sekcji ani etykiety do każdego elementu. Brak wymaganej etykiety lub instrukcji bada 3.3.2, strukturę i relacje — 1.3.1, a nazwę dostępną, rolę i wartość — 4.1.2. Zbieżność tekstu widocznego z nazwą dostępną należy do 2.5.3. Spełnienie jednej z tych właściwości nie potwierdza pozostałych.

„Etykieta” oznacza informację przedstawioną użytkownikom do rozpoznania elementu; nie ogranicza się do znacznika HTML label. Sama ukryta nazwa AX nie naprawia mylącego widocznego napisu. W naszej parze etykieta i nazwa AX są takie same, więc problemem jest znaczenie opisu wobec rzeczywistego działania.

Nie ma wymaganej liczby słów. Jedno słowo, a czasem znak, może opisywać cel w wystarczającym kontekście. Powtórzone etykiety mogą być odpowiednie przy jasnych widocznych grupach; sam duplikat nie jest ustaleniem naruszenia. Kontekst trzeba faktycznie sprawdzić, zamiast zakładać, że każda lupa oznacza wyszukiwanie albo że każda krótka etykieta jest niejasna.

Understanding sprawdzono w wersji z aktualizacją 2026-03-09. G130 (2026-01-12) i G131 (2026-08-10) są pomocniczymi technikami wystarczającymi: porównać nagłówek z opisywaną treścią oraz etykietę z przeznaczeniem kontrolki. Techniki nie są obowiązkowymi sposobami implementacji. G201 i SCR24 dotyczą pomocniczego uprzedzania o otwarciu nowego okna; nie rozszerzają 2.4.6 o taki obowiązek. Understanding nie wymienia osobnej katalogowej techniki Failure dla tego kryterium; poniższe usterki są własnymi scenariuszami.

Platformy

Środowisko / ID Podstawa, wersja i miejsce Stan / adaptacja Warunek i uzasadnienie Weryfikacja
WWW / web WCAG 2.2, 2.4.6 dotyczy warunkowo / bez zmiany wymagania Obecne nagłówki lub etykiety opisują temat lub cel, także w przeglądarce telefonu. AI, 2026-10-04
Aplikacje mobilne / mobile WCAG2ICT 2.2, nota 2025-12-11, 2.4.6 dotyczy warunkowo / bez zmiany wymagania Natywne opisy sekcji i kontrolek pełnią te same funkcje. AI, 2026-10-04
Aplikacje desktopowe / desktop WCAG2ICT 2.2, nota 2025-12-11, 2.4.6 dotyczy warunkowo / bez zmiany wymagania Dotyczy nagłówków i etykiet obecnych w interfejsie programu. AI, 2026-10-04
Dokumenty / document WCAG2ICT 2.2, nota 2025-12-11, 2.4.6 dotyczy warunkowo / bez zmiany wymagania Nagłówek opisuje część dokumentu; etykieta opisuje pole formularza, jeżeli takie istnieje. AI, 2026-10-04
Inne / other WCAG2ICT 2.2, nota 2025-12-11, 2.4.6 dotyczy warunkowo / bez zmiany wymagania W obrębie oprogramowania lub dokumentów objętych tą interpretacją, np. programu kiosku; nie oznacza oceny każdego urządzenia fizycznego. AI, 2026-10-04

WCAG2ICT stosuje tu treść wymagania bez zmian; tekst statyczny może pełnić funkcję nagłówka lub etykiety. Jest wskazówką interpretacyjną poza WWW, a nie odrębnym normatywnym wymaganiem ani oceną obowiązku prawnego. Nie analizowano EN 301 549. Wykonanie obejmuje Flutter/Cupertino w iOS Simulator i minimalny przykład webowy; desktop, dokumenty, inne urządzenia i pozostałe natywne frameworki NOT-RUN.

Rozwiązania w technologiach

Najpierw ustal, co rzeczywiście zawiera sekcja i co robi kontrolka, potem dobierz widoczny opis. Udostępnienie roli nagłówka lub nazwy pola pozwala korzystać z opisu w innych sposobach nawigacji; samo dodanie semantyki nie naprawia błędnego znaczenia tekstu.

Flutter

Fragment do osadzenia w build StatefulWidget z final code = TextEditingController() i metodą showAddress(), która wykorzystuje kod do pokazania adresu. Kontroler trzeba zwolnić w dispose.

import 'package:flutter/cupertino.dart';

Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: [
  Semantics(header: true, child: const Text('Miejsce odbioru')),
  const Text('Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.'),
  const Text('Kod odbioru'),
  Semantics(
    label: 'Kod odbioru',
    child: CupertinoTextField(controller: code),
  ),
  CupertinoButton(onPressed: showAddress, child: const Text('Pokaż adres')),
])

Pełna demonstracja źródłowa obejmuje zarządzanie stanem. Sprawdzono dokumentację CupertinoTextField i Semantics oraz lokalny renderer. PASS analiza, host, build i obserwacja iOS dla pełnej demonstracji; powyższy skrót nie jest osobnym programem. Flutter 3.44.9 / Dart 3.12.2. Android runtime NOT-RUN.

iOS / SwiftUI

import SwiftUI

struct PickupForm: View {
    @State private var code = ""
    let showAddress: (String) -> Void
    var body: some View {
        VStack(alignment: .leading) {
            Text("Miejsce odbioru").font(.title2)
                .accessibilityAddTraits(.isHeader)
            Text("Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.")
            Text("Kod odbioru")
            TextField("Kod odbioru", text: $code)
                .accessibilityLabel("Kod odbioru")
            Button("Pokaż adres") { showAddress(code) }
        }
    }
}

Widoczny Text zachowuje etykietę także po wpisaniu; callback rodzica ma rzeczywiście pokazać adres. Dokumentacja SwiftUI TextField i cechy nagłówka przejrzana 2026-10-04. Kompilacja i działanie SwiftUI NOT-RUN; wykonanie Fluttera nie potwierdza tego fragmentu.

Android / Compose

import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.semantics

@Composable
fun PickupForm(showAddress: (String) -> Unit) {
    var code by remember { mutableStateOf("") }
    Column {
        Text("Miejsce odbioru", Modifier.semantics { heading() })
        Text("Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.")
        TextField(value = code, onValueChange = { code = it },
            label = { Text("Kod odbioru") })
        Button(onClick = { showAddress(code) }) { Text("Pokaż adres") }
    }
}

Material3 label opisuje pole, a callback musi realizować zapowiedziany cel. Przejrzano oficjalne API TextField i semantykę heading, 2026-10-04; przykład używa wariantu value/onValueChange. Kompilacja i runtime Android NOT-RUN, bez przypisania nieużytej wersji SDK.

React Native

import React, { useState } from 'react';
import { Button, Text, TextInput, View } from 'react-native';

export function PickupForm({
  showAddress,
}: {
  showAddress: (code: string) => void;
}) {
  const [code, setCode] = useState('');
  return (
    <View>
      <Text accessibilityRole="header">Miejsce odbioru</Text>
      <Text>Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.</Text>
      <Text>Kod odbioru</Text>
      <TextInput
        accessibilityLabel="Kod odbioru"
        value={code}
        onChangeText={setCode}
      />
      <Button title="Pokaż adres" onPress={() => showAddress(code)} />
    </View>
  );
}

Widoczna etykieta pozostaje poza edytowalną wartością, nazwa dostępna opisuje ten sam cel. accessibilityLabelledBy jest API Androida; nie używamy go tu jako domniemanej relacji działającej również na iOS. Dokumentacja TextInput i dostępności przejrzana 2026-10-04. Typecheck, kompilacja, runtime i AT NOT-RUN.

HTML / CSS / JavaScript

W wykonanym przykładzie WWW opis pola połączono przez label for, a grupy przez fieldset i widoczne legend:

<h1>Miejsce odbioru</h1>
<p>Punkt Pracownia: ul. Przykładowa 12. Wejście od ogrodu.</p>
<label for="code">Kod odbioru</label>
<input id="code" />
<button type="submit">Pokaż adres</button>

<fieldset>
  <legend>Dostawa</legend>
  <label for="shipping-name">Imię</label><input id="shipping-name" />
</fieldset>
<fieldset>
  <legend>Rozliczenie</legend>
  <label for="billing-name">Imię</label><input id="billing-name" />
</fieldset>

Fragment zakłada formularze i obsługę submit; pełny JavaScript zawiera rzeczywiste akcje. Przejrzano HTML label i reguły ACT; składnia JavaScript i rzeczywiste działanie pełnego WWW PASS. Silnika ani wersji przeglądarki nie ustalono; to przeglądarka w aplikacji Codex na macOS, nie Safari na iPhonie.

Jak sprawdzić

  1. Rozpoznaj faktyczny nagłówek, opisywaną treść i etykiety w wybranym języku. Zachowaj widoczny kontekst, nie tylko wyizolowane napisy.
  2. Porównaj temat każdego nagłówka z rzeczywistą zawartością sekcji. W przykładzie adres i wejście mają odpowiadać „Miejsce odbioru”, a nie godzinom.
  3. Dla etykiety ustal cel pola lub działania, korzystając z treści i rzeczywistej interakcji. Wpisz P-104 i aktywuj przycisk; oczekiwany wynik to adres. Zapisz rezultat również dla mylącego wariantu.
  4. Sprawdź krótkie i powtórzone etykiety w kontekście. W kontroli WWW wpisz różne dane do obu grup i sprawdź przypisanie wyniku. Duplikat tekstu ani mała liczba znaków nie wystarczają do FAIL.
  5. Osobno odnotuj relację, rolę i nazwę w DOM/AX. Są dowodem tego, jaki opis udostępniono, a nie automatyczną oceną jego trafności ani wykonaniem czytnika.
  6. Powtórz z innym kodem, zmianą wariantu i resetem; wyklucz pozostawiony wynik lub dane poprzedniego stanu. W badanej demonstracji ZZ daje komunikat braku odbioru, a reset wraca do początkowego good.

Weryfikacja i ograniczenia

Wyniki wykonania — 2026-10-04

Sprawdzenie Wynik / dokładny zakres
Preflight SDK Pierwsze formatowanie zablokowane przez sandbox przy cache SDK, exit 1; zapis zachowany. Ponowienie z wymaganym dostępem zakończone.
Flutter analyze / test / iOS build PASS: brak uwag analizatora, 67 hostowych testów całego istniejącego zestawu, ukończony build Runner. Host nie zastępuje iOS.
Pierwsza próba iOS v1 FAIL, exit 65: w bad po wpisaniu P-104 i żądaniu tap nie odczytano adresu; pole zachowało fokus. 7 STATE, 7 TREE, 13 INPUT, 3 PNG zachowane. Nie ustalono jednoznacznej przyczyny.
Ponowienie iOS v2 PASS, exit 0: 1 XCTest / 0 failures, 70,610 s testu / 79,161 s całej próby; 14 STATE, 14 TREE, 29 INPUT i 6 PNG. Własny nowy bundle/build-marker/xctestrun i runtime marker. Dotknięcie środka obserwowanego przycisku, ten sam Runner; trzy wyniki P-104, czyszczenie/cycle, ZZ i reset.
Minimalny WWW PASS mechaniki: 18 DOM/AX, 18 wejść, 6 końcowych JPEG; P-104 ujawnił ten sam adres w trzech wariantach, kontrola grup zachowała różne dane, ZZ/cycle/reset odtworzone.
Pierwszy odczyt WWW ERROR wywołania callbacku obserwatora bez jego wykonania: brak DOM. Zachowano rzeczywisty AX/JPEG oraz opis próby. Poprawiono tylko wywołanie odczytu.
Ocena treści przez AI good i control spełniają badany warunek; bad odtwarza trzy mylne opisy. Dotyczy wyłącznie tej treści, funkcji i kontekstu.
Czytniki / urządzenia / system VoiceOver, fizyczny iPhone, systemowe listy nagłówków i odczyt grup NOT-RUN.
ACT engine / człowiek / walidator Formalny silnik ACT, przegląd człowieka i zaślepiony walidator NOT-RUN.

Środowisko: iPhone 17 Simulator, iOS 26.5, dedykowany UDID 1EBF874A-4981-4C31-A744-72A53238C827, Xcode 27.0 (27A266a), Flutter 3.44.9, Dart 3.12.2, jasny wygląd i kategoria tekstu large. Wymiary renderera, DPR i pikseli obrazów są zapisane przy rzeczywistych odczytach w metadanych. Nie zmieniano skali, orientacji ani konfiguracji AT podczas tej próby.

Pełne logi, obserwacje i manifesty obu prób zachowują pochodzenie. Porównano wszystkie pliki zbudowanych i zainstalowanych aplikacji oraz sterowników przed i po testach. Checker sprawdza integralność fixture i artefaktów; wynik PASS tego skryptu nie jest wynikiem audytu WCAG. Szczegóły odtwarzania są w dokumentacji wykonania.

ACT — zakres jest węższy niż całe kryterium

Przejrzano kompletne proponowane reguły w formacie ACT 1.1, nie ogłoszono wykonania ich przez silnik.

b49b2e — Heading is descriptive, proposed, aktualizacja 2026-07-09. Zakres: semantyczny heading w drzewie dostępności, z niepustą nazwą. Oczekiwanie dotyczy pierwszej następującej po nim postrzegalnej, niedekoracyjnej treści według flat tree, nie całej sekcji. Postrzegalna treść jest treścią palpable obecną wizualnie lub w AX, z rolą inną niż none/presentation. Nagłówek poza ekranem może należeć do zakresu; widoczny nagłówek usunięty z AX oraz pusty nagłówek nie są objęte tym testem. Reguła zakłada zbliżoną kolejność drzewa i obrazu oraz widoczność treści, którą nagłówek opisuje. Inne pozycjonowanie lub rozwijana treść mogą dać FAIL reguły bez naruszenia SC; rozwiązywanie konfliktu roli presentation zależy od wsparcia technologii. Potrzebne są DOM, AX, CSS i język. PASS lub inapplicable nadal wymagają dalszego badania SC; FAIL należy interpretować w granicach założeń.

cc0f0a — Form field label is descriptive, proposed, aktualizacja 2026-01-28. Zakres obejmuje widoczną kontrolkę i jej widoczną programmatic label: HTML label przypisane do kontrolki albo element wskazany przez aria-labelledby. Dotyczy ról checkbox, combobox, listbox, menuitemcheckbox, menuitemradio, radio, searchbox, slider, spinbutton, switch, textbox oraz input bez roli o typach color, date, datetime-local, file, month, password, time, week. Opis wraz z kontekstem wizualnym ma wyjaśniać cel pola. Etykieta może być ukryta przed AT, lecz nadal widoczna; ukryta nazwa nie naprawia mylącej widocznej etykiety. Reguła zakłada, że programowe etykiety są częścią kontekstu wizualnego i służą osobom widzącym. Wsparcie konfliktów roli może się różnić. Wymaga DOM, AX, CSS i języka; PASS/inapplicable nie wystarczają do potwierdzenia całego SC.

Ta reguła formularza nie pokrywa każdej etykiety w rozumieniu WCAG, np. własnego tekstu przycisku działania w naszym przykładzie. Nie przenosimy zakresu HTML ACT na natywne drzewo XCTest. Pola i nagłówek naszego WWW nadają się do badania opisanych warunków, ale rzeczywista ocena znaczenia jest tu oceną AI, a nie formalnym wynikiem ACT.

Reguła, drzewo, AI i człowiek

Deterministycznie można sprawdzić obecność, relacje, rzeczywistą wartość, identyczny wynik funkcji, zachowanie resetu i hashe. Drzewo pomaga powiązać opis z kontrolką, lecz nie zawiera całego kontekstu wizualnego ani intencji biznesowej. Ocena AI może wykryć oczywistą sprzeczność „godziny”–adres, ale pozostaje wrażliwa na język, specjalistyczne znaczenie i brak danych. Człowiek ma ocenić trafność opisów w realnym zadaniu; jego przegląd nie został wykonany.

Nie oceniaj opisowości po długości, obecności nazwy AX, zgodności z oczekiwanym stringiem lub nazwie good/bad. Do zaślepionego walidatora należy przygotować wejście z prawdziwej treści, struktury, widocznego kontekstu i wykonanej funkcji, bez trasy, znacznika wariantu i oczekiwanego werdyktu. Aktualne surowe materiały zawierają te oznaczenia researchu; nie są gotowym zaślepionym wejściem. Brak danych lub brak wykrytej sprzeczności oznacza potrzebę oceny, a nie PASS.

Jak sprawdza Clearship

Clearship analizuje nagłówki i etykiety pól na osiągniętych ekranach natywnych. Reguły rozpoznają ogólne opisy, a ocena AI porównuje pozostałe opisy z kontekstem obrazu i drzewa. To pomoc we wskazaniu treści do oceny; język specjalistyczny, pełna sekcja i faktyczny rezultat działania nadal wymagają rozstrzygnięcia w kontekście zadania.

Metoda z 8–9 października 2026 r. ogranicza wejście AI do 200 węzłów i najwyżej sześciu kandydatów na obserwację. Nie obejmuje nazw przycisków, wszystkich wizualnych nagłówków ani osobnej oceny treści webowej. Bez AI, przy niepewności, błędzie lub wyczerpaniu budżetu wynik wymaga człowieka. Android i iOS pozostają bez pomiaru kontrolnego, więc brak znalezisk nie potwierdza spełnienia całego kryterium.

Powiązane kryteria