tcd-theme.comで2017年に公開した記事の画像は、3枚に2枚(1,098枚中725枚)がaltなしでした。
全部の記事で数えると、画像17,650枚のうち4,342枚、4枚に1枚がaltなしです。今年の記事でも、3枚に1枚(1,680枚中521枚)が空でした。
altとは
altは、画像の内容を文章で伝えるための属性です。HTMLでは、画像のタグに alt=”〜” の形で書きます。WordPressでは、メディアの「代替テキスト」の欄に入れた文章が、altとして出力されます。
- 目の不自由な人が使う読み上げソフトは、画像の代わりにaltを読み上げる
- 回線の状態などで画像が表示されないとき、代わりにaltが表示される
- 検索エンジンは、altも手がかりにして画像の内容を理解する
参考:画像に関するSEOのベストプラクティス(Google 検索セントラル)
tcd-theme.comで数えてみた結果
記事の本文に入っている画像を、公開した年ごとに数えました。

内部リンクの漏れは新しい記事ほど多かったのに対して、altが空の画像は、年によって大きくばらついています。2016年までは、2013年(20%)と2014年(17%)を除いて1割未満です。2017年に66%、2019年に60%と跳ね上がり、2021年は5%まで下がりましたが、2022年は30%、2025年は28%、2026年は31%と、また増えています。
空のaltの画像を開いていくと、操作画面のスクリーンショットが目立ちました。古いか新しいかよりも、その時期に誰がどんな手順で記事を書いていたかで変わっている、と考えています。
altが空の画像を洗い出す手順
1. 集計用のスクリプトを用意する
内部リンクのときと同じように、AIに次のように頼みました。
WordPressの管理画面で、ブラウザのコンソールから実行するJavaScriptを書いてください。
REST APIで公開中の投稿をすべて取得し、本文の画像のうちaltが空のものを探して、
「記事タイトル」「記事URL」「画像URL」「画像の直前の文章」をCSVファイルで保存するものです。
データの書き換えはしないでください。
できあがり、tcd-theme.comで動かしたスクリプトが次のものです。記事のデータを読み込んで数えるだけで、サイトの記事や設定は書き換えません。
(async () => {
const api = wpApiSettings.root + 'wp/v2/posts';
const headers = { 'X-WP-Nonce': wpApiSettings.nonce };
const text = (html) => html.replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();
// 公開中の記事を100件ずつ取得
const posts = [];
for (let page = 1; ; page++) {
const res = await fetch(`${api}?per_page=100&page=${page}&context=edit&_fields=link,title.raw,content.raw`, { headers });
if (!res.ok) break;
const items = await res.json();
posts.push(...items);
if (items.length < 100) break;
}
// altが空の画像と、その直前の文章を集める
const rows = [];
let total = 0;
posts.forEach((p) => {
const blocks = p.content.raw.split(/\r?\n\s*\r?\n/);
blocks.forEach((block, i) => {
(block.match(/<img\b[^>]*>/gi) || []).forEach((img) => {
total++;
const alt = img.match(/\balt\s*=\s*"([^"]*)"/i);
if (alt && alt[1].trim() !== '') return;
const src = (img.match(/\bsrc\s*=\s*"([^"]+)"/i) || [])[1] || '';
rows.push([p.title.raw, p.link, src, text(blocks[i - 1] || '').slice(-100)]);
});
});
});
// CSVで保存
const csv = '' + [['記事タイトル', '記事URL', '画像URL', '直前の文章'], ...rows]
.map((r) => r.map((v) => `"${String(v).replace(/"/g, '""')}"`).join(','))
.join('\n');
const a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([csv], { type: 'text/csv' }));
a.download = 'empty-alt.csv';
a.click();
console.log(`画像${total}枚のうち、altが空の画像:${rows.length}枚`);
})();
2. 管理画面で実行する
「投稿」→「新規投稿」の画面を開き、ブラウザの「検証」→「Console」に貼り付けて、Enterキーを押します。Chromeでは、初めて貼り付けるときに「allow pasting」と入力するよう求められます。数えるのは「投稿」だけで、固定ページやカスタム投稿は入りません。実行のしかたは、内部リンクの記事と同じです。
記事を増やしていると、新しい記事から過去の記事へはリンクを張っていても、過去の記事から新しい記事への案内は後回しになりがちです。 当サイトのように記事が2,000本を超えるブログでは、関連する過去記事をすべて思い出すだけでも手間がかかります。そこで役立つのが、リンク元の記事数を集計し、AIに追...
tcd-theme.comでは1分ほどで「画像17650枚のうち、altが空の画像:4342枚」と表示され、「empty-alt.csv」というファイルが保存されました。
3. AIにaltを考えてもらう
CSVの「画像URL」を開いて画像を保存し、「直前の文章」と一緒にAIに渡します。ClaudeやChatGPTなら、画像を何枚かまとめて添付できます。
ブログ記事の画像に付けるalt(代替テキスト)を考えてください。
添付の画像それぞれについて、記事の中で直前に書かれている文章も参考にして、
画像を見られない人にも何が写っているかが伝わる文を、40文字以内で書いてください。
キーワードを詰め込んだり、「〜の画像」で終わらせたりしないでください。
画像1の直前の文章:プラグインを有効化すると、ダッシュボードに「Japanized Popup」という項目が表示されます。
画像2の直前の文章:クーポン配布
画像3の直前の文章:LINE友だち追加
tcd-theme.comの「Japanized Popup」の記事で、altが空だった画像3枚を渡すと、次のような文章が返ってきました。
| 直前の文章 | AIが考えたalt |
| プラグインを有効化すると、ダッシュボードに「Japanized Popup」という項目が表示されます。 | 管理画面のメニューに追加された「Japanized Popup」と、ポップアップの一覧画面 |
| クーポン配布 | 画面中央に表示された、10%OFFクーポンの登録を促すポップアップ |
| LINE友だち追加 | 画面右下に表示された、LINEの友だち追加を促すポップアップ |
「クーポン配布」「LINE友だち追加」のような短い見出しだけでは、画像の中身は分かりません。AIは画像の文字や配置まで読み取って、どこに何が表示されているのかを補ってくれました。

40文字以内と頼みましたが、1枚目は45文字でした。中身は3枚とも画像と合っていましたが、文字数や言い回しは、画像と見比べてから使います。
4. altを入れ直す
本文の画像と、アイキャッチ画像では、直す場所が違います。
| 直す場所 | |
| 本文の画像 | 記事の編集画面で、画像ごとにaltを入れ直す |
| アイキャッチ画像 | 「メディア」で、画像の「代替テキスト」に入れる |
本文の画像のaltは、画像を記事に入れたときに、記事の本文の中に書き込まれます。あとから「メディア」で代替テキストを入れても、すでに公開している記事のaltは変わりません。記事を開いて、画像ごとに入れ直します。
アイキャッチ画像は、WordPress標準の関数(the_post_thumbnail)で表示するテーマなら、「メディア」の代替テキストがそのまま使われます。

「メディア」の一覧で画像をクリックして開き、「代替テキスト」(①)に入れます。この画面では、入力欄から離れると自動で保存されます。
ただし、tcd-theme.comでは、メディアに代替テキストを入れても、記事ページのアイキャッチは alt=”” のまま出力されていました。関連記事などのサムネイルも、altは記事のタイトルか空でした。テーマが、メディアの代替テキストを使わずに表示しているためです。
自分のテーマがどちらかは、記事ページのソースを開き、アイキャッチの img タグの alt を見れば分かります。メディアの代替テキストが使われていないテーマなら、本文の画像から手を付けます。
これから書く記事で漏らさないために
画像をアップロードしたら、その場で「代替テキスト」を入れてから記事に入れます。本文の画像は、記事に入れたときのaltがそのまま残るためです。公開前のチェックには、チェックリストを作れるプラグインも使えます。
WordPressで記事を公開後に、次のようなうっかりミスが見つかることはありませんか? 「画像のALTタグを未設定のままだった」 「パーマリンクが日本語のままだった」 「既存記事とリンクさせるのを忘れていた」 特に複数人で運用しているサイトでは、こうしたミスを防ぐ仕組みがあると便利...
まとめ
まずは自分のテーマで、アイキャッチのaltがどこから出ているかを、記事ページのソースで確かめます。メディアの代替テキストが使われていれば、アイキャッチはメディアで直せます。使われていなければ、スクリプトで出したCSVのうち、アクセスの多い記事の本文の画像から入れ直していきます。
WordPressテーマ集







コメント