Progressiiviset verkkosovellukset ja saavutettavuus:
nykytila 2026
Kuusi vuotta sen jälkeen kun Apple toimitti iOS 16.4:ssä toimivan asennuspolun, progressiivisesta verkkosovelluksesta on tullut uteliaisuuden kohteen sijaan hankintakysymys. Tämä primer on suunnattu kehitystiimeille, joiden on tiedettävä vuonna 2026, mitä PWA todella on velkaa avustavan teknologian käyttäjilleen — ja missä alusta edelleen jää aitoa natiivisovellusta jälkeen.
1. Mitä “PWA-saavutettavuus” tarkoittaa 2026
Progressiivinen verkkosovellus on ajon aikana kolme tavallisen verkkosivuston päälle kerrostettua asiaa: Web App Manifest, service worker ja asennettu tila, jossa selainkehys korvataan käyttöjärjestelmän omalla tehtävänvaihtajamerkinnällä. Jokainen kolmesta kerroksesta tuo mukanaan omat saavutettavuusvelvollisuutensa — ja jokainen epäonnistuu avustavan teknologian käyttäjiensä kanssa eri, erikseen debugattavalla tavalla.
Vuonna 2020 koko keskustelu tiivistyi muotoon “WCAG koskee PWA:ita”, mikä oli teknisesti oikein ja operatiivisesti hyödytöntä. Vuonna 2026 keskustelu jakaantuu neljään pintaan, joilla on todella merkitystä: asennuskehotteen käyttöliittymä, käyttöjärjestelmätason toimintoja ohjaavat manifest-ominaisuudet, siirtymä selaimen saavutettavuuspuun ja käyttöjärjestelmän saavutettavuuspuun välillä kun PWA käynnistyy standalone-tilassa, sekä service workerin offline-fallbackin toiminta avustavalla teknologialla. WCAG 2.2 koskee dokumenttia; alustaintegraatiokerros kuuluu paljon pirstaleisempaan yhdistelmään W3C:n luonnoksia, toimittajakohtaista käyttäytymistä ja verkosta periytyneitä ARIA-käytäntöjä.
Tämä primer kattaa PWA:iden alustaintegraatiopinnan — asennuskehotteen, manifest-ominaisuudet, standalone-tilan avustavan teknologian toiminnan ja offline-fallbackin. Se olettaa, että taustalla oleva dokumentti täyttää jo WCAG 2.2 AA:n vaatimukset. Saavutettamattoman sivun päälle lisätty PWA-kuori on edelleen saavutettamaton sivu.
2. Asennuskehotteen käyttöliittymä
Asennuskehotteen käyttöliittymä on PWA:n käyttäjälle näkyvin pintakerros ja vuonna 2026 edelleen huonoimmin suunniteltu. Chromiumissa kehotteen porttivartijana toimii beforeinstallprompt, joka laukeaa vasta heuristisen sitoutumiskynnyksen ylityttyä ja joka useimmiten kytketään mukautettuun “Asenna sovellus” -painikkeeseen. Juuri tämä painike on paikka, jossa saavutettavuus menee pieleen: noin joka kolmas Lighthouse-pisteytetty PWA renderöi asennustoiminnon <div>- tai tyyliteltynä <span>-elementtinä, jolla ei ole roolia, saavutettavaa nimeä eikä näppäimistökäsittelijää — näkymätön ruudunlukuohjelmalle, Tabilla tavoittamaton ja erottamaton koristekromista.
Korjaus on epäloistava mutta pakollinen: renderöi asennustoiminto oikeana <button>-elementtinä, aseta saavutettava nimi johon sisältyy verbi (“Asenna Disability World tähän laitteeseen”), näytä sama painike kaikissa syötemuodoissa ja ilmoita onnistumisesta tai epäonnistumisesta live-alueella sen jälkeen kun käyttäjä hylkää käyttöjärjestelmätason vahvistusikkunan. Sama koskee related-applications- ja beforeinstallprompt-hylätty-tiloja — molempien on tuotettava avustavalle teknologialle havaittava tilamuutos.
<div onclick="install()">Asenna</div>— ei kohdistettavissa, ei roolia, ruudunlukuohjelma näkee vain sanan “Asenna” ilman toiminnallista vihjettä.- Painike piilotettuna kunnes
beforeinstallpromptlaukeaa — näppäimistökäyttäjät päätyvät vanhentuneelle “Asenna”-linkille, joka ei tapahtuman jälkeen tee mitään. - Ei tilamuutosilmoitusta hylkäämisen jälkeen — avustavan teknologian käyttäjällä ei ole keinoa tietää, onnistuiko asennus.
<button type="button" aria-label="Asenna Disability World">...</button>eksplisiittiselläaria-disabled-attribuutilla kun asennus ei vielä ole käytettävissä.beforeinstallprompt-käsittelijä tallentaa tapahtuman; painike heijastaa tulostilaaaria-disabled-arvolla, jota vaihdetaan tapahtuman saapuessa.- Kohteliaan live-alueen kautta ilmoitetaan “Asennettu” tai “Asennus hylätty”
userChoice-lupauksen ratkeamisen jälkeen, jolloin avustavan teknologian käyttäjällä on havaittava vahvistus.
3. Manifest-pintakerros
Web App Manifest kasvoi hiljaisesti vuosien 2022 ja 2026 välillä, ja monilla sen uudemmista ominaisuuksista on suoria saavutettavuusvaikutuksia. Alla oleva matriisi kuvaa yksitoista manifest-ominaisuutta, jotka ovat vuorovaikutuksessa avustavan teknologian kanssa, ja sen, mitä kukin selain nykyään niillä tekee — Chrome Androidilla, Safari iOS:ssä, Edge Windowsilla ja Firefox desktopilla. Ominaisuudet kuten file_handlers, share_target ja window_controls_overlay eivät olleet olemassa missään merkityksellisessä muodossa vuonna 2021; vuonna 2026 ne määräävät, näkyykö PWA käyttöjärjestelmän jakopaneelissa, avaako se tiedostoja järjestelmän tiedostohallinnasta ja renderöikö se oman otsikkopalkin — ja kaikkia näitä ruudunlukuohjelman käyttäjän on pystyttävä havaitsemaan ja käyttämään.
| Chrome (Android) | Safari (iOS 16.4+) | Edge (Windows) | Firefox (desktop) | |
|---|---|---|---|---|
name näkyvissä käyttöjärjestelmän käynnistimessä | Kyllä | Kyllä | Kyllä | N/A |
short_name kotinäytön kuvakkeen alla | Kyllä | Kyllä | Kyllä | N/A |
description luetaan avustavalla teknologialla sovellustietodialogissa | Kyllä | Osittain | Kyllä | N/A |
Mukautuvat maskattavat kuvakkeet (purpose: "maskable") | Kyllä | Ei | Kyllä | N/A |
lang + dir välittyvät avustavalle teknologialle | Kyllä | Osittain | Kyllä | N/A |
file_handlers — avaa järjestelmän tiedostohallinnasta | Kyllä | Ei | Kyllä | N/A |
share_target — näkyy käyttöjärjestelmän jakopaneelissa | Kyllä | Ei | Kyllä | N/A |
window_controls_overlay otsikkopalkin hallinta | N/A | N/A | Kyllä | N/A |
shortcuts — pitkä painallus käynnistinvalikossa | Kyllä | Ei | Kyllä | N/A |
display_override (minimal-ui, window-controls-overlay) | Kyllä | Ei | Kyllä | N/A |
launch_handler (focus-existing) | Kyllä | Ei | Kyllä | N/A |
window_controls_overlay -ansaKun PWA ottaa käyttöön window_controls_overlay-ominaisuuden, se ottaa haltuunsa käyttöjärjestelmän otsikkopalkin — mukaan lukien alueen, jossa natiivisovelluksessa ruudunlukuohjelma ilmoittaisi ikkunan otsikon automaattisesti. Tätä ominaisuutta käyttävien sovellusten on renderöitävä eksplisiittisesti oma kohdistettava, avustavalle teknologialle nimetty otsikkopallin hallinta turvavyöhykeinsetin sisälle, muuten ruudunlukuohjelman käyttäjät menettävät ainoat näytöllä näkyvän ankkurin “missä olen tässä sovelluksessa”.
4. Siirtymä verkosta natiiviin ruudunlukuohjelman näkökulmasta
Vaikein yksittäinen debugausongelma PWA-saavutettavuudessa vuonna 2026 on se, mitä tapahtuu kun käyttäjä ylittää saumalinjan standalone-tilan PWA-kromin ja käyttöjärjestelmän välillä. Androidilla TalkBack lukee manifest-tiedoston name-arvon kun käyttäjä kohdistaa kotinäytön kuvakkeen, ja siirtyy sitten lukemaan sovelluksen sisäistä saavutettavuuspuuta PWA:n käynnistyessä; iOS 16.4+:ssa VoiceOver toimii samoin asennetulle PWA:lle, mutta yhdellä tärkeällä poikkeuksella — ensimmäinen kohdistettava elementti käynnistyksen jälkeen ilmoitetaan ilman sovellustasoista kontekstia, jonka natiivi iOS-sovellus toimittaisi UIWindow-otsikkonsa kautta.
PWA:n kehittäjällä on yksi keino kuroa tämä aukko: kylmäkäynnistyksen yhteydessä siirretään kohdistus otsikolle tai main-alueen maamerkille, jonka saavutettavassa nimessä on sovelluksen nimi, ja asetetaan dokumentin <title> merkkijonoksi, jonka käyttöjärjestelmän tehtävänvaihtaja lukee käyttäjän vaihtaessa sovellusten välillä. Ilman tätä ruudunlukuohjelman käyttäjä menettää kontekstuaalisen vihjeen siitä, että hän on vaihtanut sovellusta — “missä olen” -ongelma, jota natiivissa sovelluksissa ei ole.
”Vuonna 2024 Bluetooth-näppäimistöä käyttävä VoiceOver-käyttäjä kertoi meille WCAG 2.2 AA -sertifioimastamme PWA:sta, että hänellä ei ollut aavistustakaan siirtyneensä Safarista sovellukseemme. Dokumentti oli saavutettava. Siirtymä ei ollut.”
5. Offline-tila ja avustava teknologia
Kun service worker tarjoaa offline-fallback-sivun, ilmenee kaksi avustavalle teknologialle ominaista virhettä: kohdistus, joka oli nyt purkautuneen sivun sisällä, pudotetaan äänettömästi dokumentin runkoon, eikä offline-sivu itsessään juuri koskaan käytä live-aluetta kertoakseen ruudunlukuohjelman käyttäjälle mitä juuri tapahtui. Tuloksena on käyttäjä, joka kuulee parhaimmillaan yhden ilmoituksen offline-sivun otsikosta ja kokee muuten täydellisen kontekstin menetyksen.
Korjaus on kohdella offline-siirtymää tilamuutoksena, ilmoittaa siitä kohteliaan aria-live-alueen kautta, palauttaa kohdistus tunnetulle maamerkille offline-sivulla ja tarjota “Yritä uudelleen” -hallinta oikeana painikkeena eikä useimpien service-worker-mallipohjien toimittamana “Lataa uudelleen” -linkkinä. Sama koskee foreground-sync-palautuspolkua: kun yhteys palautuu ja service worker tyhjentää jonon, sekin on tilamuutos, josta avustavan teknologian käyttäjälle on kerrottava.
Kohteliaan live-alueen kautta ilmoitetaan “Olet offline” siirtymän yhteydessä. Kohdistus siirretään offline-sivun pääotsikkoon. Selkeästi nimetty <button>Yritä uudelleen</button> on ensimmäinen interaktiivinen elementti. Yhteyden palautuessa toinen kohteliaan ilmoitus sanoo “Yhteys palautettu” ja kohdistus palautetaan siihen, mitä käyttäjä viimeksi käytti.
6. iOS Safari vs. Android vs. natiivi
Kysymyksellä “toimitetaanko PWA vai natiivisovellus” on nyt myös saavutettavuusnäkökulma ominaisuuksien täydellisyyden lisäksi. Alla vertaillaan samaa hypoteettista uutistenlukulaitetta neljällä tavalla — PWA:na Androidilla, PWA:na iOS 16.4+:ssa, natiivina iOS-sovelluksena ja natiivina Android-sovelluksena — viidessä pintakerroksessa, joihin ruudunlukuohjelman käyttäjä törmää ensin.
| PWA · Android | PWA · iOS 16.4+ | Natiivi · iOS | Natiivi · Android | |
|---|---|---|---|---|
| Asennustoiminto löydettävissä avustavalla teknologialla | Jos kehittäjä teki sen oikein | Lisää kotinäytölle -valikko — löydettävissä | App Store — täysin saavutettava | Play Store — täysin saavutettava |
| Sovelluksen nimi ja kuvaus käynnistinkuvakkeessa | Kyllä | Kyllä (name + apple-mobile-web-app-title) | Kyllä (UIKit Info.plist) | Kyllä (Android manifest) |
| Mukautuvat kuvakkeet (teemoitettu / yksivärinen) | Kyllä (maskable) | Ei | Kyllä | Kyllä |
| Tehtävänvaihtajakonteksti ilmoitetaan | Kyllä | Osittain | Kyllä (UIWindow-otsikko) | Kyllä |
| Käyttöjärjestelmän jakopaneelin merkintä | Kyllä (share_target) | Ei | Kyllä (UIActivity) | Kyllä (Intent filter) |
| Pitkä painallus — pikavalikko | Kyllä (shortcuts) | Ei | Kyllä (UIApplicationShortcutItem) | Kyllä |
| Push-ilmoitusten saavutettava sisältö | Kyllä | Kyllä (iOS 16.4 lähtien) | Kyllä | Kyllä |
| Mukautettu roottori / pikanavigaatio | N/A | N/A | Kyllä | Kyllä |
iOS 16.4 avasi asennuspolun, push-ilmoitukset ja badging-API:n PWA:ille, ja iOS 17 kuroi peruskäynnistyspintaa vielä lähemmäksi. Mutta file_handlers, share_target, shortcuts ja window_controls_overlay pysyvät edelleen tukemattomina. Avustavan teknologian käyttäjälle, joka luottaa käyttöjärjestelmän jakopaneeliin siirtääkseen sisältöä sovellusten välillä, iOS-PWA on edelleen selvästi pienempi pinta kuin Android-PWA tai natiivi iOS-sovellus.
Yhteenveto: vuoden 2026 toimintaohje
Toimita asennustoiminto oikeana <button>-elementtinä saavutettavalla nimellä. Kytke kohteliaan live-alueen userChoice-tulokseen. Täytä manifestissa name, short_name, description, lang ja dir, ja toimita maskattavia kuvakkeita Androidille. Jos otat käyttöön window_controls_overlay, renderöi ja nimeä oma otsikkopalkkisi; jos otat käyttöön file_handlers tai share_target, kohtele tuloksena syntyvää käynnistystä tilamuutoksena ja ilmoita siitä sovellukseen saavuttaessa.
Palauta kohdistus nimetylle maamerkille joka kerta kun ruudunlukuohjelman käyttäjä ylittää saumalinjan — kylmäkäynnistyksessä, tehtävänvaihtajasta palatessa, offline-siirtymässä, share-target-käynnistyksessä ja yhteyden palautuessa. Kohtele jokainen ylitys erillisenä tapahtumana, joka on velkaa käyttäjälle havaittavan ilmoituksen ja tunnetun kohdistusankkurin. Mikään tässä ei ole vaikeaa; lähes mitään ei toimiteta johdonmukaisesti.
PWA voi vuonna 2026 olla avustavan teknologian käyttäjälle hyvin lähellä natiivia sovellusta — Androidilla. iOS:llä se on lähempänä kuin ennen, mutta todellinen aukko on edelleen olemassa. Aukko sulkeutuu suunnilleen yksi manifest-ominaisuus vuodessa. Hankintatiimeille, jotka valitsevat PWA:n ja natiivisovelluksen välillä, saavutettavuuskysymys ei ole enää “voiko PWA olla saavutettava?” — se voi. Kysymys on, onko tiimi lukenut yllä olevat yksitoista manifest-riviä ja hyväksynyt, että jokainen niistä on osa toimitettavaa kokonaisuutta.
”PWA-kuori ei vapauta tiimiä alustaintegraatiotyöstä. Se lisää yksitoista uutta saavutettavuuspintaa ja pyytää tiimiä käsittelemään jokaisen niistä jokaisella alustalle, jolle se toimitetaan.”