2.4.5Poziom AA

Wiele sposobów odnalezienia strony

Multiple Ways

Zapewnij więcej niż jeden sposób odnalezienia każdej strony w zbiorze, poza stronami będącymi krokiem lub wynikiem procesu.

Komu pomaga
Pamięć i koncentracjaSłabowidzenieNiewidzenie
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

Każdą stronę w zbiorze powinno dać się odnaleźć więcej niż jednym sposobem, np. powiązanymi linkami i wyszukiwaniem. Użytkownik może nie znać hierarchii menu lub nie chcieć przechodzić przez kolejne strony. Wyjątek dotyczy strony będącej wymaganym krokiem lub wynikiem rzeczywistego procesu; nie obejmuje całego portalu z formularzem.

Wyszukiwanie lub mapa pomagają osobom z trudnościami z pamięcią i koncentracją oraz osobom słabowidzącym oglądającym mały fragment nawigacji. Osoba niewidoma może wybrać krótszą drogę zamiast przeglądania wielu linków. To uzasadnienia redakcyjne; testu czytnika i badania użytkowników nie wykonano. Klawiatura i wskaźnik obsługujące to samo menu nie tworzą dwóch metod odnajdywania.

Przykłady błędów i poprawek

Dwie drogi do tych samych czterech stron

Własny katalog „Pracowni” ma strony HTTP Home, Wejście od ogrodu, Godziny odbioru i Kontakt. Każda ma odrębne URI i istotną treść, wspólny autor oraz cel odbioru syntetycznego zamówienia P-104. Wariant wybiera konfigurację eksperymentu; ścieżka określa stronę. Nie jest to SPA z czterema panelami pod jednym URI.

Wariant Drogi i skutek Poprawka lub kontrola
Good Kolejne/poprzednie instrukcje i wyszukiwanie tytułu/treści pozwalają odnaleźć wszystkie cztery cele, także home. Obie drogi otwierają to samo URI, nagłówek i treść każdego celu. Wykonano je dla całego małego zbioru.
Bad Entry/hours/contact mają tylko łańcuch poprzednia/następna, bez pełnej listy na home, mapy lub wyszukiwania. Dodaj skuteczną inną drogę do każdego celu. Te niezależne instrukcje nie są wymaganymi krokami procesu.
Control Osobny proces start → review → receipt: wpisanie P-104, sprawdzenie i potwierdzenie odbioru. Konkretny wynik procesu korzysta z wyjątku; nie przenoś go na wszystkie strony.
  1. W good czytanie kolejnych instrukcji otwiera „Wejście od ogrodu”.
  2. Wyszukanie jej tytułu lub treści i otwarcie wyniku prowadzi do tego samego URI i zawartości.
  3. Te dwie drogi wykonano też dla godzin, kontaktu i home. Nieobecne zapytanie zzmissing daje rzeczywisty brak wyników.
Good WWW: Wejście od ogrodu otwarte linkami; poniżej wyszukiwanie.

Surowy JPEG HTTP z 2026-10-04. Kadr pokazuje cel i mechanizm, sekwencję potwierdzają historyczne odczyty.

Good WWW: ten sam cel Wejście od ogrodu po wyszukaniu.

Identyczny wygląd i URI celu; różnicę dróg potwierdzają wejścia oraz DOM/AX.

Bad WWW: ta sama instrukcja wejścia z poprzednia/następna, bez wyszukiwania.

Własna bariera w zbiorze stron; stopka narzędzi eksperymentu nie jest drugą metodą do tej instrukcji.

Stopka cycle/reset należy do narzędzi badania. Zmienia wariant albo wraca do home; nie daje drugiej drogi do entry/hours/contact w bad. Nie przypisujemy samemu home bezwzględnie jednej drogi, skoro narzędzia do niego prowadzą. Przejście do good zmienia eksperyment i nie jest odnalezieniem strony w bad. To własne odtworzenie bariery, bez wymyślonego numeru błędu F lub danych o częstości.

Wyjątek dla wyniku procesu

W control wejście bez kodu do receipt oraz po kodzie, ale przed akceptacją, prowadzi do start. Wynik pojawia się po wymaganych działaniach. Kolejność linków informacyjnych poprzednia/następna sama nie tworzy takiego procesu.

Control WWW: odbiór P-104 wykonany po wymaganym sprawdzeniu i potwierdzeniu.

Wynik konkretnego procesu. Historia bezpośrednich wejść potwierdza blokadę przed wymaganymi działaniami.

iOS jako analogia wewnętrznej nawigacji

Katalog Flutter/Cupertino pozwala otwierać instrukcje, szukać, oznaczać przeczytanie, zmieniać wariant i resetować. To jeden samodzielny program. Nie tworzono niezależnych programów lub dokumentów w zbiorze. Przykład ilustruje dobrą praktykę odnajdywania ekranów, bez normatywnego FAIL WCAG2ICT za ich pojedynczą listę. Właściwy zbiór stron i wyjątek procesu potwierdzano w wersji HTTP.

Good Flutter/iOS: wyszukane Wejście od ogrodu z przyciskiem otwarcia i klawiaturą.

Surowy PNG końcowej próby v2. Analogia dobrej praktyki ekranów jednego programu, bez normatywnego wyniku dla zbioru programów.

Kiedy obowiązuje i gdzie są wyjątki

Strony, zbiór i proces

Zbiór stron łączy wspólny cel i tego samego autora, grupę lub organizację. Sama domena go nie przesądza; różne wersje językowe tworzą odrębne zbiory. Strona jest zasobem z jednego URI wraz z treścią renderowaną razem. Panele poczty, kontaktów i kalendarza pod tym samym URI mogą należeć do jednej strony, bez automatycznego wymagania wielu metod do każdego panelu.

Proces jest serią działań, z których każde jest wymagane do ukończenia czynności. Wyniki wyszukiwania i potwierdzenie odbioru po kodzie i akceptacji są tu konkretnymi wynikami procesu. Zwykła instrukcja „Godziny odbioru” pozostaje niezależną informacją. Wyjątek nie obejmuje wszystkich stron tylko dlatego, że witryna ma formularz lub routing.

Wybór skutecznych sposobów

Kryterium nie wymaga określonej wyszukiwarki ani liczby kliknięć. Pomocnicze techniki można łączyć; ich obecność bez działania nie jest dowodem.

Technika Zakres i kontrola
G125: powiązane linki Prowadzą do związanej informacji; w próbce do kolejnych instrukcji.
G64: spis treści Dotyczy jednego dzieła, także podzielonego na strony; nazwy, kolejność i cele muszą odpowiadać sekcjom. Nie jest automatycznie mapą witryny.
G63: mapa witryny Odpowiada organizacji, jest osiągalna z wymienionych stron i daje działające cele wszystkich stron; aktualizuj po zmianach.
G161: wyszukiwanie Istniejący termin daje odpowiadającą treść lub wyniki z działającymi linkami. Pole i przycisk bez funkcji nie wystarczają. Synonimy/odmiany poprawiają użyteczność, bez obowiązkowego silnika.
G126: pełna lista Linki do pozostałych stron na każdej stronie małego zbioru; kompletność i cele. Długa lista wymaga również oceny pomijania bloków.
G185: mała witryna Pełne linki z home i powroty mogą łączyć zwykłą nawigację i faktyczną mapę w jednym mechanizmie.

Pełna lista na home z powrotami przy 3–4 stronach nie jest samoistnym błędem. Nie wymagaj zawsze oddzielnych kontrolek lub innych miejsc na ekranie. Dwa identyczne menu albo przyciski do tej samej listy nie zapewniają automatycznie dwóch metod. Back przeglądarki, Find in Page i znajomość adresu nie są automatycznie drugą drogą autora.

Understanding nie podaje katalogu nazwanych błędów F dla 2.4.5. Sprawdzony w źródle katalog ACT z 2026-10-04 nie miał reguł tego kryterium; ACT engine/run niewykonany. Doradcze zakładki PDF2 i wybór strony H99 pomagają orientacji, bez zastąpienia kwalifikacji zbioru oraz dróg do właściwego celu.

Platformy

Klasyfikacja AI z 2026-10-04: WCAG 2.2 Recommendation 2024-12-12 dla stron oraz informacyjne WCAG2ICT Group Note 2025-12-11 poza kontekstem webowym. Wszystkie konteksty są warunkowe; brak testu nie wyłącza platformy. Nie oceniano EN 301 549 ani obowiązków prawnych.

Środowisko Warunek i adaptacja Wykonanie źródłowe
WWW, także telefon Strona w zbiorze stron; poza uzasadnionym krokiem lub wynikiem procesu. Zbiór HTTP w IAB na macOS.
Natywne mobile i desktop Program w zbiorze programów; nie wewnętrzne ekrany. Flutter/iOS tylko jako analogia; native desktop i OS search niewykonane.
Dokumenty Dokument w zbiorze dokumentów; rozdziały jednego pliku nie wystarczają. Dokumenty/odbiornik niewykonane.
Kiosk webowy lub natywny Ustal właściwy zbiór i niezależną osiągalność; sprzęt sam nie rozstrzyga zakresu. Niewykonane.

Zbiór dokumentów wymaga wspólnego celu i autora, wspólnej publikacji i wzajemnych odwołań nazwami lub linkami każdego członka do pozostałych. Zbiór programów wymaga także wspólnej dystrybucji, samodzielnego uruchamiania/użycia i spójnej wzajemnej nawigacji. Takie zbiory są rzadkie; samo pakowanie wcześniej opublikowanych elementów nie wystarcza. Samodzielny program poza zbiorem automatycznie spełnia ten warunkowy zakres.

WCAG2ICT nie nakazuje wielu dróg do grup UI jednej aplikacji. Katalog plików i odpowiednie wyszukiwanie systemowe mogą zapewnić metody poza nią, po sprawdzeniu dostępności i celu. Definicja zbioru wymaga niezależnej osiągalności elementów; krok nieosiągalny bez wcześniejszych działań jej nie spełnia. W hybrydzie rozdziel stronę webową i program natywny.

Rozwiązania w technologiach

Flutter

CupertinoTextField(
  controller: query,
  onChanged: (_) => setState(() {}),
);
// W StatefulWidget, z polem page i wspólnym open(n):
CupertinoButton(
  onPressed: () => open(n),
  child: Text('Otwórz: ${instructionPages[n].$1}'),
);

Fragment wymaga istniejącego StatefulWidget, TextEditingController query, stanu page, filtrowania tytułu/treści oraz wspólnego open(n). Pełna implementacja otwiera ten sam element z łańcucha lub wyniku, czyści query i przeczytanie; reset przywraca dane, cykl zmienia wariant, kontrola dopuszcza potwierdzenie dla P-104. Analiza, 66 testów hostowych i build Flutter 3.44.9/Dart 3.12.2 PASS; iOS v1 FAIL i v2 PASS zachowane poniżej. Nie jest to zbiór niezależnych programów; Android niewykonany.

iOS / SwiftUI

import SwiftUI
struct Instruction: Identifiable { let id: String; let title: String; let body: String }
struct Catalog: View {
    let items: [Instruction]
    @State private var query = ""
    var body: some View {
        NavigationStack {
            List {
                if let first = items.first {
                    NavigationLink("Czytaj od początku") { Reader(item: first, items: items) }
                }
                ForEach(items.filter { query.isEmpty ||
                    ($0.title + " " + $0.body).localizedCaseInsensitiveContains(query)
                }) { item in
                    NavigationLink(item.title) { Reader(item: item, items: items) }
                }
            }
            .searchable(text: $query, prompt: "Szukaj instrukcji")
            .navigationTitle("Instrukcje Pracowni")
        }
    }
}
struct Reader: View {
    let item: Instruction
    let items: [Instruction]
    var body: some View {
        ScrollView {
            VStack(alignment: .leading) {
                Text(item.title).font(.title); Text(item.body)
                if let n = items.firstIndex(where: { $0.id == item.id }), n + 1 < items.count {
                    NavigationLink("Następna instrukcja") { Reader(item: items[n + 1], items: items) }
                }
            }
        }
    }
}

SwiftUI z NavigationStack wymaga iOS 16+. Reader renderuje ten sam element z nawigacji i wyników. Lokalne filtrowanie nie obsługuje odmian/synonimów; dodaj stan braku wyników w produkcji. To katalog jednej aplikacji. Dokumentacja przejrzana 2026-10-04; kompilacja i działanie niewykonane.

Android / Compose

import androidx.compose.runtime.*
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.*
import androidx.compose.ui.Modifier
data class Instruction(val id: String, val title: String, val body: String)
@Composable fun Catalog(items: List<Instruction>) {
    var query by remember { mutableStateOf("") }
    var selected by remember { mutableStateOf<Instruction?>(null) }
    Column(Modifier.verticalScroll(rememberScrollState())) {
        val item = selected
        if (item != null) {
            Text(item.title); Text(item.body)
            Button(onClick = { selected = null }) { Text("Katalog") }
        }
        OutlinedTextField(query, { query = it }, label = { Text("Szukaj instrukcji") })
        val found = items.filter { (it.title + " " + it.body).contains(query, ignoreCase = true) }
        if (found.isEmpty()) Text("Brak wyników")
        found.forEach { target ->
            Button(onClick = { selected = target }) { Text(target.title) }
        }
    }
}

Kod używa lokalnego stanu czytnika. Puste query daje katalog, zapytanie wskazuje te same obiekty. Router i systemowy Back wymagają integracji hosta; fragment jej nie deklaruje. Korzysta z istniejących runtime/foundation/Material3, bez nowych zależności lub aplikacji. Dokumentacja przejrzana; kompilacja/działanie niewykonane.

React Native

import React, { useState } from 'react';
import { ScrollView, Text, TextInput, Pressable } from 'react-native';
type Instruction = { id: string; title: string; body: string };
export function Catalog({ items }: { items: Instruction[] }) {
  const [query, setQuery] = useState('');
  const [selected, setSelected] = useState<Instruction | null>(null);
  const found = items.filter((i) =>
    (i.title + ' ' + i.body).toLowerCase().includes(query.toLowerCase()),
  );
  return (
    <ScrollView keyboardShouldPersistTaps="handled">
      {selected && (
        <>
          <Text accessibilityRole="header">{selected.title}</Text>
          <Text>{selected.body}</Text>
          <Pressable
            accessibilityRole="button"
            onPress={() => setSelected(null)}
          >
            <Text>Katalog</Text>
          </Pressable>
        </>
      )}
      <Text>Szukaj instrukcji</Text>
      <TextInput
        accessibilityLabel="Szukaj instrukcji"
        value={query}
        onChangeText={setQuery}
      />
      {!found.length && <Text>Brak wyników</Text>}
      {found.map((i) => (
        <Pressable
          key={i.id}
          accessibilityRole="button"
          onPress={() => setSelected(i)}
        >
          <Text>{i.title}</Text>
        </Pressable>
      ))}
    </ScrollView>
  );
}

selected renderuje ten sam cel z katalogu lub wyników. Host musi zapewnić Back, safe area, styl i rozmiary celów. To wewnętrzny katalog, bez osobnych URI i bez dodatkowej biblioteki nawigacji. Dokumentacja przejrzana; typecheck i działanie niewykonane.

WWW

<nav aria-label="Czytaj instrukcje">
  <a href="/entry.html?variant=good">Następna instrukcja</a>
</nav>
<form role="search" action="/search.html" method="get">
  <input type="hidden" name="variant" value="good" />
  <label for="query">Szukaj instrukcji</label>
  <input id="query" name="q" />
  <button>Szukaj</button>
</form>

HTML wymaga działającej obsługi wyszukiwania. W demonstracji serwer przeszukuje tytuł i treść wszystkich czterech stron oraz zwraca zwykłe linki do właściwych URI. GET/POST wykonują normalną nawigację HTTP, bez JS ustawiającego stan; CSS pokazuje fokus. Przegląd dokumentacji i działanie próbki PASS 2026-10-04; osobny HTML validator niewykonany. W każdej metodzie zachowaj identyfikator tego samego celu.

Jak sprawdzić

  1. Ustal zbiór, autora, wspólny cel i wszystkich członków. Rozdziel URI stron, panele i wariant eksperymentu.
  2. Dla każdej niezależnej strony opisz metody odnalezienia. Oceniaj architekturę, bez liczenia kontrolek. Uwzględnij pełne home/mapę z powrotami małej witryny.
  3. Wykonaj obie drogi zwykłym wejściem. Porównaj adres/identyfikator, nazwę, nagłówek i istotną treść. Sam href lub pole wyszukiwania nie wystarcza.
  4. Sprawdź wyszukiwanie wszystkich celów i brak wyniku; kompletność oraz aktualność mapy lub spisu. Dotarcie do jednej strony nie potwierdza wszystkich.
  5. Uzasadnij proces wymaganymi działaniami i ich wynikiem. Nie rozszerzaj wyjątku wyniku na niezależne informacje.
  6. Dla części natywnej sprawdź zakres WCAG2ICT, definicję zbioru i rzeczywiste metody OS/odbiornika. Zapisz osiągnięte cele oraz braki.

Weryfikacja i ograniczenia

Wykonania źródłowe z 2026-10-04. iOS: iPhone 17 Simulator / iOS 26.5, Xcode 27.0 (27A266a), SDK iphonesimulator27.0, Flutter 3.44.9 / Dart 3.12.2. Jasny wygląd, 402 × 874 logical, DPR 3, PNG 1206 × 2622. IAB na macOS: viewport 1280 × 720, DPR 1, JPEG bez edycji; wersja silnika nieustalona. Bez zmian ustawień OS.

Sprawdzenie Rzeczywisty wynik źródła
Analiza/host Analiza PASS; 66 testów PASS, w tym czytnik/search/cykl/reset/fallback i onPressed:null. Bez Androida.
Build aplikacji/drivera PASS, zakończone przed instalacją.
Pierwszy iOS v1 FAIL: 1 test/1 failure, 51,705 s. Native AX isEnabled zwróciło true przy onPressed:null. Zachowane 20 STATE/TREE, 25 INPUT i 2 PNG. Nie zmieniano aplikacji, aby wymusić flagę.
Końcowy iOS v2 PASS: 1 test/0 failures, 66,898 s (wall 74,120 s), 26 STATE/TREE, 34 INPUT, 4 PNG. Pusty formularz bez wyniku i P-104 z wynikiem, wszystkie elementy search, brak wyników, czytnik, stan przeczytania, cykl/reset/fallback. Flagi AX enabled ten test nie potwierdza.
WWW PASS w próbce: 43 DOM/AX, 53 zapisane wejścia, 6 JPEG. Obie drogi do czterech celów, identyczne URI/body, Tab/Enter, brak wyników, reset/cykl i proces. Receipt blokowane przed kodem i przed akceptacją. Pierwsze otwarcie karty jest poza ledgerem.
Kontrola zapisanych dowodów PASS dla znanych stanów i celów, surowych logów, manifestów i hashów; bez ACT, oceny AI lub zaślepionego niezależnego walidatora.

Sandbox początkowo blokował cache Fluttera i bind localhost. Uprawnione ponowienia przeszły; te odmowy nie są awarią SDK lub symulatora ani wynikiem testu. Pierwszy XCTest pozostaje rzeczywistym FAIL, bez zmiany na niewykonany. Nie restartowano symulatora/usług i nie kasowano danych. Historyczne manifesty nadal identyfikują v1, bez przepisania na v2.

W źródle obejrzano sześć kadrów webowych, cztery finalne i dwa historyczne iOS. Bez obrazów AI, filmu/audio; sekwencja adresów, treści i wejść pokazuje drogi, bez mowy VoiceOver. Screenshot jednej strony nie kwalifikuje zbioru, pełnego pokrycia i wyjątku procesu.

Automatyzacja może zebrać graf, otworzyć wyniki i porównać cele. Liczba krawędzi lub elementów search nie rozstrzyga odrębności metod. Znaczenie nawigacji, autor/cel, kompletność, dostępność systemowych mechanizmów i proces wymagają oceny. Małe home chroni przed fałszywym alarmem „jedna kontrolka”; niepełne lub uszkodzone wyszukiwanie przed fałszywym wynikiem pozytywnym. Oczekiwania demonstracji pozostają w driverze/checkerze, poza wejściem niezależnego walidatora.

Jak sprawdza Clearship

Metoda dowodów z 2026-10-08 zbiera z aplikacji kandydatów na zbiór, nawigację, wyszukiwanie, spis/mapę i łańcuch poprzednia/następna oraz kontrolki pojawiające się po akcjach. Wynik zawsze wymaga człowieka: kwalifikacja zbioru, wyjątek procesu i skuteczne dotarcie każdą metodą do każdego celu pozostają jego oceną. Wybór tej metody nie zamawia ręcznej usługi.

Android i iOS (pomiar iOS 2026-10-09) wskazały po 5/6 przypadków zestawu rozwojowego, bez progu automatycznego werdyktu. Brakuje natywnej pozycji bieżącej strony, która przy dotknięciu nie zmienia stanu. W pełnych aplikacjach iOS 52 wskazania poza pulą także wymagają kwalifikacji; nie są potwierdzonymi naruszeniami.

Kandydaci wynikają ze stanów jednego tytułu, bez kwalifikacji niezależnych programów lub dokumentów. Między różnymi tytułami mogą pozostać niewykryci. Bez obserwacji po akcjach i przy limitach przejścia dowody mogą być niepełne. Harness nie sprawdza systemowego wyszukiwania ani innych programów poza własną aplikacją. Brak kandydata, samo pole search lub dotarcie do jednego celu nie daje pozytywnej oceny kryterium.

Powiązane kryteria