/ Research · Public websites · October 2026
How slow and how accessible are city council websites?
I measured the home pages of the city councils of Spain’s 50 provincial capitals: how long they take on an average phone, how much they weigh, and how they work for someone who cannot see the screen. These are public websites; people need them to book appointments and get certificates.
Not on this page: blame. I have no data on who built each site or what was asked for, so I do not guess.
/ In short
The numbers
/ The carousels
Both LinkedIn carousels
Speed first, then accessibility. Click to enlarge.
/ 01 · Speed
A national experience, measured
The median mobile score is 56 out of 100 and 11 capitals score under 50. The median home page needs 17 seconds to show its main content; Google calls anything over 4 seconds slow. The median page weighs almost 6 MB and 12 weigh more than 10 MB. Bilbao and Vitoria-Gasteiz were the fastest in this run.
The heaviest home page is Valladolid’s, 34 MB, and it still scores 57: 32 of those megabytes are two videos that download on their own, but the page appears in 13 seconds. Murcia weighs 30 MB, scores 4 and, in the simulation, takes over two minutes. The score measures when you can see and use the page, not how much it weighs.
In Salamanca a single photo of an electric car weighs 21.8 MB, more than 46 of the 50 home pages. In Murcia a press-release photo weighs 5.9 MB. Images uploaded without anyone checking their size.
/ 02 · Accessibility
Using them without seeing the screen
axe found WCAG 2.1 errors on 42 of 49 home pages on desktop (23 with critical errors) and on 46 of 49 on mobile (28 critical). Toledo was down during the desktop run and Huesca during the mobile one. Automated tests only find part of the problems: Deque measured about 57% of issues by volume, so the real picture is worse, not better.
The clearest case: on mobile, the menu button in Donostia, Huelva and Toledo has no name, so a screen reader just says “button”. In Huelva the button does include the text “Toggle navigation” for screen readers, but a mobile CSS rule, .navbar-toggle span { display: none !important }, hides it, and the accessible name ends up empty. In Palma axe flags 146 elements, most of them links without text: service icons whose label sits outside the link.
| What fails most (sites with at least one error of each kind, out of 49) | /49 |
|---|---|
| Low-contrast text | 32 |
| Broken ARIA code | 22 |
| Links without text | 21 |
| Buttons without a name | 8 |
| Images without alt text | 7 |
| Form fields without a label | 5 |
At 320 px wide (WCAG 1.4.10, the same as zooming to 400%), 12 sites force horizontal scrolling and 5 do not adapt to mobile at all: Ávila, Granada, Jaén, Soria and Bilbao. Accessibility declarations: 24 say “partially compliant”, none claims full compliance, 6 still cite standards that have been replaced, 13 could not be found from the home page and 7 do not state their level.
/ 03 · The 50 capitals
Every city, both studies
| City | Score | Seconds | MB | WCAG desktop | WCAG mobile | Declaration |
|---|---|---|---|---|---|---|
| A Coruña | 38 | 17.2 | 2.7 | 5 | 4 | cites replaced standards |
| Albacete | 28 | 21.3 | 3.8 | 100 | 53 | cites replaced standards |
| Alicante | 62 | 8.2 | 1.4 | 0 | 0 | partially compliant |
| Almería | 46 | 12.1 | 4.7 | 10 | 13 | not found from the home page |
| Ávila | 65 | 6.9 | 1.0 | 28 | 28 | not found from the home page |
| Badajoz | 49 | 6.7 | 6.8 | 17 | 8 | partially compliant |
| Barcelona | 56 | 19.4 | 5.9 | 17 | 19 | partially compliant |
| Bilbao | 81 | 3.5 | 2.2 | 4 | 4 | does not say |
| Burgos | 55 | 21.2 | 7.2 | 14 | 7 | cites replaced standards |
| Cáceres | 55 | 19.4 | 22.4 | 38 | 48 | not found from the home page |
| Cádiz | 64 | 7.1 | 1.9 | 11 | 11 | partially compliant |
| Castellón de la Plana | 55 | 17.2 | 3.1 | 14 | 16 | partially compliant |
| Ciudad Real | 53 | 23.5 | 9.0 | 7 | 7 | does not say |
| Córdoba | 51 | 12.6 | 14.6 | 3 | 2 | partially compliant |
| Cuenca | 61 | 12.1 | 1.8 | 15 | 16 | partially compliant |
| Donostia-San Sebastián | 45 | 8.8 | 2.4 | 12 | 4 | does not say |
| Girona | 58 | 13.4 | 2.4 | 31 | 35 | not found from the home page |
| Granada | 62 | 8.5 | 1.1 | 4 | 4 | does not say |
| Guadalajara | 59 | 16.7 | 2.8 | 31 | 26 | does not say |
| Huelva | 46 | 23.3 | 7.3 | 0 | 1 | not found from the home page |
| Huesca | 52 | 53.8 | 14.8 | 18 | not found from the home page | |
| Jaén | 64 | 46.2 | 8.4 | 9 | 9 | not found from the home page |
| Las Palmas de Gran Canaria | 26 | 40.9 | 15.9 | 27 | 24 | partially compliant |
| León | 5 | 12 | not found from the home page | |||
| Lleida | 55 | 39.8 | 11.1 | 2 | 2 | partially compliant |
| Logroño | 42 | 35.9 | 19.0 | 0 | 0 | does not say |
| Lugo | 56 | 19.3 | 4.1 | 44 | 38 | not found from the home page |
| Madrid | 63 | 14.1 | 3.3 | 12 | 15 | partially compliant |
| Málaga | 28 | 39.4 | 9.3 | 11 | 7 | partially compliant |
| Murcia | 4 | 124.2 | 30.5 | 14 | 12 | does not say |
| Ourense | 62 | 6.5 | 8.9 | 21 | 4 | partially compliant |
| Oviedo | 58 | 14.6 | 3.7 | 52 | 42 | not found from the home page |
| Palencia | 58 | 6.8 | 20.9 | 0 | 1 | partially compliant |
| Palma | 53 | 14.8 | 5.6 | 146 | 133 | cites replaced standards |
| Pamplona | 58 | 32.6 | 7.8 | 7 | 15 | partially compliant |
| Pontevedra | 54 | 10.7 | 1.5 | 3 | 3 | partially compliant |
| Salamanca | 54 | 89.2 | 30.4 | 1 | 1 | partially compliant |
| Santa Cruz de Tenerife | 53 | 38.4 | 13.3 | 43 | 39 | partially compliant |
| Santander | 56 | 19.1 | 3.2 | 14 | 17 | not found from the home page |
| Segovia | 59 | 11.3 | 1.3 | 2 | 1 | partially compliant |
| Sevilla | 56 | 26.9 | 4.7 | 7 | 11 | partially compliant |
| Soria | 69 | 7.3 | 0.8 | 3 | 3 | not found from the home page |
| Tarragona | 51 | 32.6 | 6.6 | 0 | 1 | partially compliant |
| Teruel | 64 | 34.5 | 9.6 | 17 | 17 | cites replaced standards |
| Toledo | 24 | cites replaced standards | ||||
| Valencia | 49 | 27.0 | 14.1 | 0 | 2 | partially compliant |
| Valladolid | 57 | 13.2 | 34.2 | 3 | 4 | partially compliant |
| Vitoria-Gasteiz | 92 | 3.1 | 1.0 | 0 | 0 | partially compliant |
| Zamora | 55 | 25.3 | 9.0 | 35 | 30 | not found from the home page |
| Zaragoza | 63 | 16.6 | 5.3 | 4 | 4 | partially compliant |
/ 04 · WCAG
What WCAG is, version by version
The Web Content Accessibility Guidelines are the W3C’s technical standard for making websites usable by people with disabilities: blind people using screen readers, people who navigate only with a keyboard, people with low vision, deaf people, people with cognitive disabilities. They are organised around four principles: content must be perceivable, operable, understandable and robust.
Each rule is a “success criterion” with a level: A (the minimum), AA and AAA. Laws ask for level AA, which means meeting every A and AA criterion. No law requires AAA as a whole.
| Version | Year | What it added |
|---|---|---|
| WCAG 1.0 | 1999 | The first version, written for the HTML of the time. Replaced. |
| WCAG 2.0 | 2008 | Technology-neutral rules and the A/AA/AAA levels. Also ISO/IEC 40500:2012. |
| WCAG 2.1 | 2018 | 17 new criteria for mobile, low vision and cognitive needs: reflow at 320 px (1.4.10), contrast of icons and controls (1.4.11), text spacing, screen orientation, pointer gestures, status messages. |
| WCAG 2.2 | 2023 | 9 new criteria: focus not hidden behind sticky bars (2.4.11), alternatives to dragging (2.5.7), targets of at least 24 px (2.5.8), help in a consistent place, not asking twice for the same data, and logins without puzzles (3.3.8). Removes 4.1.1 Parsing. |
| WCAG 3.0 | draft | A full rewrite still in progress at the W3C. Not a standard yet. |
A burden? What they ask for, and what they don't
Some people see WCAG as a straitjacket that forces one way of designing. But they don't set colours, typefaces or layouts. They set what people must be able to do: read text with enough contrast, use everything with a keyboard, know what each button is for. How you get there is up to you.
And what they ask for is almost exactly a well-built website, including for people without any disability:
- Code that lasts. A real button instead of a clickable div, labelled forms, headings in order. It's correct HTML, and it breaks less.
- Sites machines can understand. Search engines, voice assistants, AI agents and testing tools such as Playwright read that same structure, each element's role and name, to work out what is on the page.
- Sites that are easier to use. Contrast to read in bright sunlight, captions to watch a video with the sound off, pages that don't break when you zoom in.
- A criterion you can check. Without WCAG, "accessible" would be an opinion. With it, there is a list you can require when you commission a site and check when it's delivered.
They do have costs, and it's worth saying so: a very light brand palette may not reach the contrast text needs, captioning video takes time, and fixing an old site that was built badly is expensive. Thought about from the start, the cost is much lower.
/ 05 · The law
Which version is mandatory, and where
| Where | Who | What it requires |
|---|---|---|
| Spain, public sector | Public administration websites and apps (RD 1112/2018, from the EU Web Accessibility Directive 2016/2102) | WCAG 2.1 AA through EN 301 549 v3.2.1, an accessibility declaration linked as “Accessibility” from every page, a complaints channel and periodic reviews |
| Spain, private sector | Certain products and services: e-commerce, banking, transport, e-books, telecoms (Law 11/2023, from the European Accessibility Act 2019/882), applicable since 28 June 2025 | The same EN 301 549 standard. Micro-enterprises providing services are exempt |
| European Union, next | Both of the above | EN 301 549 v4.1.1, published on 2 September 2026, moves to WCAG 2.2. It becomes binding once cited in the Official Journal of the EU, expected on 16 December 2026 |
| United Kingdom | Public sector bodies | WCAG 2.2 AA |
| United States | State and local governments (ADA Title II, 2024 rule) | WCAG 2.1 AA. An April 2026 interim rule moved the deadlines to April 2027 (50,000+ inhabitants) and April 2028 (smaller entities) |
So the 50 city councils in this study have had to meet WCAG 2.1 AA since 2018, and will have to meet 2.2 once the new standard is cited. WCAG is the floor, not the ceiling, and many of these sites do not reach the floor.
/ 06 · Method
How it was measured, and its limits
- Speed: Lighthouse, the engine behind PageSpeed Insights, on a simulated mid-range phone with slow 4G. Each site three times, median kept, about 150 runs. Re-checked by hand in PageSpeed: most moved less than 10 points; Vitoria moved most, from 92 to 65. Trust the order more than the exact number.
- Weight is the most stable figure: 30 MB is 30 MB whoever measures it.
- It is a lab test with a simulated phone, not real-user data, and only the home page.
- almeria.es belongs to the provincial council, not the city: the right site had to be found by hand.
- Accessibility: axe-core 4.13 against WCAG 2.1 A and AA. Two detectors were discarded for not being reliable enough: invisible focus and “skip to content”.
Sources: W3C: WCAG overview · What’s new in WCAG 2.2 · EN 301 549 v4.1.1 (Deque) · RD 1112/2018 (BOE) · Law 11/2023 (BOE) · ADA Title II deadlines (JD Supra)
/ Next
I check before I publish.
I wrote the scripts with help from Claude. What to measure, the manual checks and the numbers I threw away were my call. If your team needs that kind of checking, email me.