Web開発
最も訪問されているウェブサイトのわずか2.6%しか完全な有効HTMLを持たない
Only 2.6% of the most visited websites have fully valid HTML (validatehtml.com)
要約
調査によると、最も訪問されているウェブサイトの90.5%に少なくとも1つのHTMLエラーがあり、完全にクリーンなサイトはわずか2.6%でした。中央値で12個、平均で37.8個のエラーが見つかりました。CSSエラーも65.1%のサイトに存在し、アクセシビリティに関する問題も普遍的であることが示されています。
全文翻訳
主な発見事項
サイトの90.5%に少なくとも1つのHTMLエラーがあります
2,655サイト中2,402サイト。警告ではなく、記述された標準への違反です。
完全にクリーンなのは2.6%のみです69サイトのみがエラーゼロおよびベストプラクティスに関する警告ゼロを返しました。
中央値のサイトには12個のエラーがあります平均は37.8で、最悪のサイトは2,209でした。少数のサイトがほとんどのダメージを抱えています。
サイトの65.1%にCSSエラーがあります
2,471サイトで測定され、ページがリンクするすべてのスタイルシートにわたるものです。
中央値のサイトには1つのCSSエラーがありますCSSは異なって失敗します。ほとんどのサイトには数百ではなく、1つの不正な宣言があります。平均は7.1です。
220個の異なるメッセージファミリーそのうち187個は仕様違反です。ウェブ全体のマークアップは、数えられる数の方法で失敗します。
数字が示すこと
有効なHTMLは例外であり、規則ではありません。ウェブで最も訪問されているサイトの10件中9件は、ホームページで標準に違反しており、2.6%が完全にクリーンです。ブラウザはエラー回復に非常に優れているため、何も修正を強制しないため、まさにこれが蓄積される理由です。
分布は非常に歪んでいます。中央値のサイトには12個のエラー、平均は37.8、最悪は2,209です。ほとんどのサイトには、数回繰り返される少数の間違いがあります。少数派は、ページ上のすべてのコンポーネントに繰り返される1つのテンプレートバグを持っています。サイトを監査する場合、カウントは壊れた個別のルールの数よりもはるかに重要ではありません。だからこそ、私たちのスコアは発生回数ごとではなく、ルールごとに計算されるのです。
トップの失敗は構造的なものであり、タイプミスではありません。最も一般的な単一の発見は、<X>要素は<X>の下の内容として許可されていません(サイトの59.5%)。誰も手でそれを書きません。それは、それがどこにドロップされているかを知らないフレームワークがコンポーネントを構成したときに起こることです。それはエディタではなく、ビルド時に作成されたネストの問題です。
アクセシビリティの失敗はほぼ普遍的です。アクセシビリティチェッカーが保持する発見(見出しレベル、ラベルのない入力、テキストのないリンク)は、それぞれ3分の1以上のサイトに表示されます。欧州アクセシビリティ法が2025年6月から適用されることを考えると、これはスタイル設定ではなく、コンプライアンスの対象です。
CSSは1か所ではなく、どこでも壊れます。サイトの65.1%にCSSエラーがありますが、中央値の数は1であり、最も一般的なのは、`X`プロパティの無効な値です。壊れた宣言を持つスタイルシートはレンダリングされ続けます。ブラウザはその行をドロップして続行します。その沈黙が、これらの問題が本番環境で何年も生き残る理由です。
最も一般的な25のHTMLの発見メッセージごとにではなく、個別のサイトがメッセージを発した数でランク付けされています。単一のサイトで4,000回繰り返される1つのメッセージは、依然として1つのサイトです。
#メッセージサイトシェア
1<style>要素は<div>の下の内容として許可されていません仕様違反・element-permitted-content・修正方法1,58159.5%
2JavaScriptリソースに「type」属性は不要ですベストプラクティス・script-type・修正方法1,45254.7%
3<button>には推奨される「type」属性がありませんベストプラクティス・no-implicit-button-type・修正方法1,31649.6%
4ネイティブ<button>要素の使用を推奨しますベストプラクティス・prefer-native-element・修正方法1,10741.7%
5<img>には必須の「src」属性がありません仕様違反・element-required-attributes1,09341.2%
6アンカーリンクには目的を説明するテキストが必要ですベストプラクティス・wcag/h30・修正方法1,00137.7%
7ランドマークには空でなく一意のアクセシブル名(aria-labelまたはaria-labelledby)が必要ですベストプラクティス・unique-landmark・修正方法91834.6%
8最初の見出しレベルは<h1>である必要がありますが、<h2>でしたベストプラクティス・heading-level・修正方法82331.0%
9<input>要素には<label>がありませんベストプラクティス・input-missing-label・修正方法79730.0%
10属性「target」の値が「」で無効です仕様違反・attribute-allowed-values・修正方法77829.3%
11<a>の冗長なロール「link」ベストプラクティス・no-redundant-role・修正方法74828.2%
12見出しレベルは1つしか増加できません。<h3>を期待していましたが、<h4>でしたベストプラクティス・heading-level・修正方法66825.2%
13重複ID「porb」仕様違反・no-dup-id・修正方法62123.4%
14<button>にはアクセシブルテキストが必要ですベストプラクティス・text-content・修正方法58922.2%
15<a>要素の属性「name」は非推奨です仕様違反・no-deprecated-attr・修正方法51219.3%
16<img>には必須の「alt」属性がありません仕様違反・wcag/h37・修正方法50719.1%
17クラス「][」が重複していますベストプラクティス・no-dup-class44716.8%
18要素参照ID「Browse」が見つかりません仕様違反・no-missing-references・修正方法43216.3%
19「aria-label」はこの要素に使用できません仕様違反・aria-label-misuse・修正方法42816.1%
20ボタンを追加するときは、<input type="submit">の代わりに<button>を使用することを推奨しますベストプラクティス・prefer-button・修正方法40915.4%
21<form>要素には送信ボタンが必要ですベストプラクティス・wcag/h32・修正方法35713.4%
22<a>要素は<a>の子孫として許可されていません仕様違反・element-permitted-content・修正方法33912.8%
23タイトルのテキストは70文字を超えることはできませんベストプラクティス・long-title33312.5%
24終了タグ '</p>' が不正です仕様違反・close-order・修正方法26810.1%
25閉じられていない要素 '<div>'仕様違反・close-order・修正方法2298.6%
最も一般的な15のCSSの発見ページがリンクするすべてのスタイルシートは個別に検証されるため、行番号は常に独自のファイルを参照します。
#メッセージサイトシェア
1`transition-delay`プロパティの無効な値仕様違反・SyntaxMatchError・修正方法1,34150.5%
2不明なプロパティ `font-smoothing`仕様違反・SyntaxReferenceError・修正方法43616.4%
3不明なat-rule `@if`仕様違反・SyntaxReferenceError・修正方法1234.6%
4予期しない入力の終了仕様違反・SyntaxError・修正方法863.2%
5`src`ディスクリプタの無効な値仕様違反・SyntaxMatchError・修正方法712.7%
6予期しないセミコロン仕様違反・SyntaxError・修正方法622.3%
7不明なat-ruleディスクリプタ `font-named-instance`仕様違反・SyntaxReferenceError・修正方法361.4%
8 `@media`プリの無効な値仕様違反・SyntaxMatchError・修正方法301.1%
9無効な空のセレクタ仕様違反・SyntaxError220.8%
10予期しないトークン Ident("padding-top")仕様違反・SyntaxError・修正方法130.5%
11予期しないトークン Delim('!')仕様違反・SyntaxError・修正方法80.3%
12予期しないトークン Delim('*')仕様違反・SyntaxError・修正方法70.3%
13セレクタの不正な末尾のコンビネータ仕様違反・SyntaxError70.3%
14予期しないトークン AtKeyword("media")仕様違反・SyntaxError・修正方法50.2%
15`::before`または`::after`のような疑似要素は、`Delim('.')`のようなセレクタに続けることはできません仕様違反・SyntaxError40.2%
測定方法
TrancoリストからTrancoトップ5,000を採取しました。Trancoリストは、操作に抵抗するために複数の人気リストを平均した調査ランキングです。2026年8月に各ドメインのホームページをHTTPS経由でリクエストしました。
各ページは、このサイトがユーザーのために実行するのと同じ公開エンドポイントを通過しました。HTMLはhtml-validateで標準プリセットで、CSSはcsstree-validatorでlightningcssが最新構文を裁定しました。エンジンではなく実際のAPIを駆動することは、私たちが提供するすべての誤検出フィルターがここでも適用されることを意味するため、これらのカウントはツールのユーザーが実際に目にするものです。
重大度はスタイル選択ではありません。標準に違反するものをエラーとしてカウントします。インラインスタイルやボタンのタイプの欠如など、有効なHTMLである意見は、ベストプラクティスとして別途カウントされ、上記のテーブルでそのようにラベル付けされています。多くの公開された「エラー」統計はこれらを混同しており、それがヘッドラインを約3倍にしています。
メッセージは、それらの可変部分をマスクすることによってファミリーにグループ化されます。したがって、不明なプロパティ `colr` と不明なプロパティ `bakground` は1つの問題としてカウントされます。各行に表示される正確な単語は、最も頻繁なバリアントです。
5,000ドメインのうち2,345が測定結果を生成せず、このページ上のすべてのパーセンテージから除外されています。リストの上位の大部分はインフラストラクチャです。CDNおよびDNSホスト名であり、ページを提供するように設計されていませんでした。その理由は次のとおりです。
1,479URLに到達できませんでした。有効でアクセス可能であることを確認してください
433取得に失敗しました:…禁止
248応答が大きすぎます(最大NKB)
81取得に失敗しました:…見つかりません
21HTMLコンテンツが提供されていません
そして、私たちは自分自身でそれを実行しました。このサイトのすべてのページ、あなたが読んでいるページを含む102ページすべてが、エラーゼロで検証されています。