Do French public websites declare the language of their pages?

French accessibility rules require a public page to declare its language and carry a title. We measured five basic HTML declarations on the home page of 600 randomly drawn French public domains. Here are the numbers, and above all what they do not say.

600

domains sampled

31,904

domains in the population

466

answer over HTTPS

134

do not answer

What the 466 responding domains return

DeclarationDomainsShare
Character encoding declared (meta tag or HTTP header)45798.1 %
HTML doctype45196.8 %
Non empty title tag44595.5 %
lang attribute on the html tag43392.9 %
viewport meta tag41288.4 %
The five declarations, as a share of the 466 responding domainsCharacter encoding declared (meta tag or HTTP header)98.1 %HTML doctype96.8 %Non empty title tag95.5 %lang attribute on the html tag92.9 %viewport meta tag88.4 %
Five horizontal bars of decreasing length, from character encoding at 98.1% down to viewport at 88.4%. All five exceed 88%, so the bars look alike: the gap between the first and the last is under ten points.

What these numbers do not say

Declaring a language is not declaring the right one

This is the most important caveat, and the survey provides the evidence itself. Here are the values actually found in the lang attribute.

Value foundDomainsStatus
fr-FR224Valid
fr167Valid
fr-fr23Valid
en12English on a French site
fr_FR2Invalid tag (BCP 47)
FR1Valid
The values actually found in the lang attributefr-FR224fr167fr-fr23en12fr_FR2FR1
Six very unequal bars. The first three, fr-FR, fr and fr-fr, are long and grey. The last three are so short they can barely be read: en (12 domains), fr_FR (2) and FR (1). The two red bars are the problematic ones, and they are almost invisible next to the others. That is exactly what the chart makes hard to see, and that is the point: fourteen faulty pages out of 433 go unnoticed in a total, yet they are enough to make a compliance rate wrong.

Twelve French public websites announce their home page as English. Two more declare fr_FR with an underscore, which is not a valid language tag under BCP 47. Those fourteen pages count inside the 92.9% and would fail an audit. The 92.9% figure is therefore a ceiling, not a compliance rate.

The 134 non responses are not 134 broken sites

A domain registered but never put in service, a domain served over plain HTTP only, an expired certificate and a momentarily slow server all produce the same line. The only defensible statement is that 134 of the 600 domains on this list were not serving an HTTPS home page at the time of the survey. They are excluded from the shares and counted separately.

  • Missing DNS, refused connection or rejected certificate106
  • 4xx or 5xx code returned by the server21
  • No answer within 12 seconds4
  • Connection closed by the server3

A home page is not a website

The survey covers a single page per domain. Accessibility compliance is judged on a sample of pages by a human auditor, never by a robot: a missing declaration is not proven non compliance, and this survey issues no accessibility verdict.

The method, so the figure can be challenged

The population comes from the urls.txt file published by Etalab, pinned to a precise version. Each host name is lowercased, its www prefix removed, then deduplicated: removing the prefix before deduplication is what turns 35,742 URLs into 31,904 domains, since a town listed under two forms would otherwise count twice. The sample is drawn with a fixed seed over the sorted population, sorting being required for the seed to reproduce the same draw. One request per domain, never a retry.

Etalab urls.txt · blob 2baca606a77d66b5800ac3591c45eefab2708e03 · 35,742 URLs -> 31,904 · seed 20260828

The tool and the data are public

The script is a single Python file with no dependency, under the MIT licence. The repository holds the full survey, line by line, and the detailed method needed to replay it identically.

Why we ran this survey

We test online services and we publish our protocols. One thing struck us: everyone cites the compliance of public websites, almost nobody measures anything verifiable. Declared language and page title are two points a machine can record without human judgement, in one request. We did it, and we publish the result with its limits rather than the figure alone.