<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ブログ運営 | Ecological Notes Web</title>
	<atom:link href="https://ecological-information.com/archives/category/blog-management/feed" rel="self" type="application/rss+xml" />
	<link>https://ecological-information.com</link>
	<description>生き物の分類・生態・進化が分かるサイト</description>
	<lastBuildDate>Sun, 07 Jun 2026 08:12:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://ecological-information.com/wp-content/uploads/2024/07/ecological-information-favicon-150x150.jpg</url>
	<title>ブログ運営 | Ecological Notes Web</title>
	<link>https://ecological-information.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://ecological-information.com/archives/category/blog-management/feed"/>
	<item>
		<title>WordPressのデバッグログ（debug.log）肥大化対策！自動削除プラグイン「LH Clear Debug Log by Cron」の設定と仕様</title>
		<link>https://ecological-information.com/archives/24055</link>
		
		<dc:creator><![CDATA[Ikeda, K.]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 04:28:00 +0000</pubDate>
				<category><![CDATA[ブログ運営]]></category>
		<guid isPermaLink="false">https://ecological-information.com/?p=24055</guid>

					<description><![CDATA[WordPressのサイト管理やテーマ開発において、エラーを特定するために便利なデバッグモード。しかし、エラーログの出力をオンにしたまま放置してしまい、気づけばサーバーの容量が圧迫されていた……という経験はないでしょうか [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wpulike wpulike-heart "><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button" aria-label="いいねボタン" data-ulike-id="24055" data-ulike-nonce="6b7dfc29d0" data-ulike-type="post" data-ulike-template="wpulike-heart" data-ulike-display-likers="" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_24055"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	
<p class="wp-block-paragraph">WordPressのサイト管理やテーマ開発において、エラーを特定するために便利なデバッグモード。しかし、エラーログの出力をオンにしたまま放置してしまい、気づけばサーバーの容量が圧迫されていた……という経験はないでしょうか。</p>



<p class="wp-block-paragraph">手動でFTPを開いて毎回 <code>debug.log</code> を削除したり空にしたりするのは、地味に面倒な作業です。</p>



<p class="wp-block-paragraph">そこで本記事では、デバッグログの肥大化を完全自動で解決してくれるプラグイン「<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/lh-clear-debug-log-by-cron">LH Clear Debug Log by Cron</a>」をご紹介します。有効インストール数は「10+」と超マイナーですが、一度設定すればバックグラウンドで賢くログを管理してくれる優れものです。</p>


<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/lh-clear-debug-log-by-cron" title="LH Clear Debug Log by Cron" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img fetchpriority="high" decoding="async" src="https://ecological-information.com/wp-content/uploads/cocoon-resources/blog-card-cache/195473edf9a10ffbd2c0a434a4b6b130.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180"></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">LH Clear Debug Log by Cron</div><div class="blogcard-snippet external-blogcard-snippet">A simple plugin that clears the debug log by the cron schedule when it gets too big.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ja.wordpress.org/plugins/lh-clear-debug-log-by-cron/" alt="ja.wordpress.org" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16"></div><div class="blogcard-domain external-blogcard-domain">ja.wordpress.org</div></div></div></div></a>


<p class="wp-block-paragraph">プラグインの詳しい内部仕様から、最新のWordPress 7.0環境での検証結果までを分かりやすく解説します。ログ管理の手間を減らして、サイトのパフォーマンスを最適に保ちたい方はぜひ参考にしてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">WordPressのデバッグログ（debug.log）が肥大化する原因とリスク</a></li><li><a href="#toc2" tabindex="0">プラグイン「LH Clear Debug Log by Cron」の内部仕様と仕組み</a><ol><li><a href="#toc3" tabindex="0">自動削除の基準値（しきい値）は「4MB」</a></li><li><a href="#toc4" tabindex="0">フィルターフックによる容量制限のカスタマイズ</a></li><li><a href="#toc5" tabindex="0">WP-Cronによるバックグラウンド処理</a></li></ol></li><li><a href="#toc6" tabindex="0">【動作検証】公式4年未更新でも、最新のWordPress 7.0環境で正常動作を確認</a></li><li><a href="#toc7" tabindex="0">まとめ：エラーログの手動削除から解放される軽量な解決策</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">WordPressのデバッグログ（debug.log）が肥大化する原因とリスク</span></h2>



<p class="wp-block-paragraph">WordPressの不具合調査やカスタマイズに便利なデバッグモード（<code>WP_DEBUG_LOG</code>）。しかし、これを有効にしたまま運用を続けると、エラーやNotice（注意）が蓄積され、<strong>ログファイルが数GB単位まで肥大化</strong>することがあります。</p>



<p class="wp-block-paragraph">ログファイルが大きくなりすぎると、以下のトラブルを引き起こすリスクがあります。</p>



<ul class="wp-block-list">
<li>サーバーのディスク容量を圧迫し、サイトが停止する。</li>



<li>サーバーのI/O負荷が上がり、サイトの表示速度が低下する。</li>
</ul>



<p class="wp-block-paragraph">「気づいた時には手遅れ」になりがちなログ問題ですが、手動でFTPを開いて毎回削除するのは非効率です。</p>



<h2 class="wp-block-heading"><span id="toc2">プラグイン「LH Clear Debug Log by Cron」の内部仕様と仕組み</span></h2>



<p class="wp-block-paragraph">「<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/lh-clear-debug-log-by-cron/#description">LH Clear Debug Log by Cron</a>」は、有効インストール数こそ「10+」と非常にマイナーですが、ログの自動クリーンアップに特化した実用的なプラグインです。公式のFAQに公開されている内部仕様は以下の通りです。</p>



<h3 class="wp-block-heading"><span id="toc3">自動削除の基準値（しきい値）は「4MB」</span></h3>



<p class="wp-block-paragraph">デフォルトでは、ログファイルが「4,194,304バイト（約4MB）」を超えたタイミングで、自動的に中身をクリア（空に）します。数GBになる前に数MB単位で確実にリセットするため、サーバーを圧迫しません。</p>



<h3 class="wp-block-heading"><span id="toc4">フィルターフックによる容量制限のカスタマイズ</span></h3>



<p class="wp-block-paragraph">プラグイン内に用意されている<strong>フィルターフックを利用することで、削除基準となる容量（4MB）を自由に変更可能</strong>です。サイトの運用環境に合わせて「2MBで消す」「10MBまで許容する」といった調整がコード側から行えます。</p>



<h3 class="wp-block-heading"><span id="toc5">WP-Cronによるバックグラウンド処理</span></h3>



<p class="wp-block-paragraph">WordPressの定期実行システム（WP-Cron）を利用して、ログのサイズを定期的に監視・削除します。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph"><strong>注意：WP-Cronの動作が前提</strong> 本プラグインはWP-Cronに依存しているため、サーバー側でWP-Cronを意図的に停止している環境では自動削除が機能しません。導入前に自環境のCron設定をご確認ください。</p>
</div>



<h2 class="wp-block-heading"><span id="toc6">【動作検証】公式4年未更新でも、最新のWordPress 7.0環境で正常動作を確認</span></h2>



<p class="wp-block-paragraph">公式のメタデータでは「最終更新：4年前」「検証済み最新バージョン：6.0.12」となっているため、一見すると導入に不安を覚えるスペックです。</p>



<p class="wp-block-paragraph">しかし、<strong>実際に最新の「WordPress 7.0」環境に導入し、デバッグログが4MBを超えた時点で正常に自動削除（クリア）されることを検証・確認済み</strong>です。</p>



<p class="wp-block-paragraph">管理画面（UI）や余計な設定ページを持たない、単一機能（シングルタスク）の極めてシンプルなコード設計であるため、WordPressのメジャーアップデートの影響を受けにくく、現行バージョンでも安定して動作します。</p>



<h2 class="wp-block-heading"><span id="toc7">まとめ：エラーログの手動削除から解放される軽量な解決策</span></h2>



<p class="wp-block-paragraph">万人向けの派手なツールではありませんが、「開発環境で常時デバッグモードにしている」「本番環境でログを監視しつつ、容量制限をかけたい」という管理者にとって、「<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/lh-clear-debug-log-by-cron/#description">LH Clear Debug Log by Cron</a>」は非常に確実な選択肢になります。</p>



<p class="wp-block-paragraph">ぶっちゃけ以下のようなPHPコードを function.php かプラグイン「Code Snippets」に貼った上で、プラグイン「WP Crontrol」で delete_debug_log_daily を週1回で発動するように設定することでも同様のことはできます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>//wp-content/debug.logを一定期間で自動削除する
add_action('delete_debug_log_daily', function () {
    $file = WP_CONTENT_DIR . '/debug.log';
    if (file_exists($file)) {
        unlink($file);
    }
});</code></pre></div>



<p class="wp-block-paragraph">ただ個人的にはPHPコードを増やすほどデバッグやリファクタリングが増えて大変なことになるのを身に沁みて感じているのでできるだけ人の手を借りたいと思っています。</p>



<p class="wp-block-paragraph">「4MBで自動クリア」という明確な仕様と、現行バージョンでの動作実績を踏まえ、ログの肥大化対策を自動化したい方はぜひ導入を検討してみてください。</p>



<p class="wp-block-paragraph">なお、デバッグログの自動削除つきでデバッグログを総合的に管理したい場合は「<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/debug-log-viewer/">Debug Log Viewer</a>」というプラグインもありますが、Free版は固定50MBとかなり大きいです。 Pro版は1〜5000MBの間で変更可能です。</p>


<a rel="noopener" target="_blank" href="https://ja.wordpress.org/plugins/debug-log-viewer" title="Debug Log Viewer" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://ecological-information.com/wp-content/uploads/cocoon-resources/blog-card-cache/cbaf752b69ea4ba81615a008d8376d18.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180"></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Debug Log Viewer</div><div class="blogcard-snippet external-blogcard-snippet">Effortlessly view, search, filter and manage your WordPress debug.log in the admin dashboard. Real-time monitoring and e…</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ja.wordpress.org/plugins/debug-log-viewer/" alt="ja.wordpress.org" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16"></div><div class="blogcard-domain external-blogcard-domain">ja.wordpress.org</div></div></div></div></a>		<div class="wpulike wpulike-heart "><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button" aria-label="いいねボタン" data-ulike-id="24055" data-ulike-nonce="6b7dfc29d0" data-ulike-type="post" data-ulike-template="wpulike-heart" data-ulike-display-likers="" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_24055"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JavaScript・PHPで画像のキャプションのテキストを取得してAlt属性（代替テキスト）に代入する方法を紹介（ChatGPT利用）</title>
		<link>https://ecological-information.com/archives/11010</link>
		
		<dc:creator><![CDATA[Ikeda, K.]]></dc:creator>
		<pubDate>Mon, 18 Dec 2023 05:19:40 +0000</pubDate>
				<category><![CDATA[ブログ運営]]></category>
		<category><![CDATA[ウェブ開発]]></category>
		<category><![CDATA[クライアントサイド開発]]></category>
		<category><![CDATA[フロントエンド開発]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[生態]]></category>
		<guid isPermaLink="false">https://ecological-information.com/?p=11010</guid>

					<description><![CDATA[皆さんはWeb開発やサイトを運営していて「追加した画像にキャプションをつける場合、Alt属性（代替テキスト）も同時に指定できたらいいのにはなぁ…。」と思ったことはありますか？一般的にキャプションは閲覧するユーザー（人間） [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="wpulike wpulike-heart "><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button" aria-label="いいねボタン" data-ulike-id="11010" data-ulike-nonce="af96ecd43c" data-ulike-type="post" data-ulike-template="wpulike-heart" data-ulike-display-likers="" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_11010"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	
<p class="wp-block-paragraph">皆さんはWeb開発やサイトを運営していて「追加した画像にキャプションをつける場合、Alt属性（代替テキスト）も同時に指定できたらいいのにはなぁ…。」と思ったことはありますか？一般的にキャプションは閲覧するユーザー（人間）のため、Alt属性は徘徊するクローラー（Googlebotなどの機械）のためにつけるとされていて、どちらもあるとユーザエクスペリエンスやSEOが良くなり、サイトのアクセス数が増える可能性があります。私は長らくこの点で面倒さを感じていて困っていたので今回JavaScriptでスクリプトを作成しました。もしよかったら参考にしてみてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">WordPress画像管理の課題を解決！ChatGPTを活用してキャプションとAlt属性を一括設定する方法</a></li><li><a href="#toc2" tabindex="0">キャプションとAlt属性とは？その違いは？なぜ両方必要？</a></li><li><a href="#toc3" tabindex="0">JavaScriptでWordPressに実装する方法</a></li><li><a href="#toc4" tabindex="0">Alt属性がうまく指定できているか確認する方法は？</a></li><li><a href="#toc5" tabindex="0">この方法のメリットとデメリットは？</a></li><li><a href="#toc6" tabindex="0">PHPでfigcaptionの内容をAlt属性に追加する方法（2026年6月2日追記）</a></li><li><a href="#toc7" tabindex="0">引用文献</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">WordPress画像管理の課題を解決！ChatGPTを活用してキャプションとAlt属性を一括設定する方法</span></h2>



<p class="wp-block-paragraph">皆さんは「静的サイトやWordPressなどのCMSに追加した画像にキャプションをつける場合、Alt属性（代替テキスト）も同時に指定できたらいいのにはなぁ…。」と思ったことはありませんか？</p>



<p class="wp-block-paragraph">私の運営しているこのブログは生き物について解説することが多くその際、生態写真を多く掲載するのですが、WordPressでは画像のキャプションは編集画面のメイン部分で簡単に指定できますが、Alt属性は編集画面の右側にあるサイドバーから選択し指定することになり、大量の画像を挿入している場合、一目でAlt属性の内容が確認できないので、指定できているかどうかの見落としが多発していました。</p>



<p class="wp-block-paragraph">そもそも、キャプションとAlt属性は同じ内容になることが殆どで、「だったら同じになるプラグインはないのかな？」と思って探していました。</p>



<p class="wp-block-paragraph">しかし見つからず、JavaScriptでの生成もできましたが当時では技術力がなくこの件は長らく放置していましたが、最近HTML・CSS・JavaScriptを本格的に学習したことと、生成AIの発展により、ChatGPTとJavaScriptを用いることで解決できることが分かったので、シェアしておきます。</p>



<h2 class="wp-block-heading"><span id="toc2">キャプションとAlt属性とは？その違いは？なぜ両方必要？</span></h2>



<p class="wp-block-paragraph">まず大前提としてなぜキャプションとAlt属性を両方指定しなければならない（とされているか）について解説しておきます。</p>



<p class="wp-block-paragraph">そもそも、キャプションは画像の説明や補足情報を提供するために使用されます。主にユーザーに対してコンテキストを提供し、理解を助ける役割があります。</p>



<p class="wp-block-paragraph">キャプションはHTMLではキャプションは通常<code>&lt;figure&gt;</code>要素の中に配置され、その中に要素が使われます。 </p>



<p class="wp-block-paragraph">一方、Alt属性は画像が読み上げられたり、画像が表示できない場合に代替テキストを提供することが元々の目的です。</p>



<p class="wp-block-paragraph">Alt属性の本来の機能は画像自体が表示できない場合に画像の代替情報を提供することでしたが（Craven,  2006）、特に視覚障害者の方が、音声で画像を理解するためにも利用されています（Bigham et al., 2010）。</p>



<p class="wp-block-paragraph">Alt属性はHTMLでは<code>&lt;img&gt;</code>要素の「属性（attributes）」として指定されます。</p>



<p class="wp-block-paragraph">HTMLのソースコードで示すと以下のような構造になっています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;main&gt;
    &lt;figure&gt;
        &lt;img src="sample.jpg" alt="sample"/&gt; &lt;!--altで指定された部分がAlt属性--&gt;
        &lt;figcaption&gt;sample&lt;/figcaption&gt; &lt;!--figcaptionで囲まれた部分がキャプション--&gt;
    &lt;/figure&gt;
&lt;/main&gt;</code></pre></div>



<p class="wp-block-paragraph">ただ、これだけではなぜキャプションとAlt属性を両方指定しなければならないことなっているのか分からないかもしれません。</p>



<p class="wp-block-paragraph"><strong>これはAlt属性の内容が現在では検索エンジン最適化（SEO）の一環としても利用され、検索結果に影響を与える可能性があるとされているからです。</strong></p>



<p class="wp-block-paragraph"><cite>『Google検索』</cite>などの検索サイトはGooglebotなどのクローラーを用いてプログラムによってWeb上の情報を収集していますが、<cite>『Google検索』</cite>ではこのクローラーがAlt属性を参照して検索結果に反映していることが研究で分かっています（Ferraz, 2015）。</p>



<p class="wp-block-paragraph">一方、キャプションに関してはそれほど影響しないとされており、サイト閲覧者が記事を見やすくなるというユーザーエクスペリエンスを高める役割があるとされています。</p>



<p class="wp-block-paragraph">要するに、現代ではキャプションは閲覧するユーザー（人間）のため、Alt属性は徘徊するクローラー（Googlebotなどの機械）のためにあるということです。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">つまり、Alt属性を指定しておくことで、<cite>『Google画像検索』</cite>などの画像検索サイトで自サイトの画像を的確に表示してくれる可能性があるのです。</span></strong></p>



<p class="wp-block-paragraph">したがって、一般的はどちらも指定しておくメリットがあるとされています。またアクセシビリティの改善にも繋がります。</p>



<p class="wp-block-paragraph">ただ、本当にクローラーがキャプションを無視しているのかについては不明なところも多く、それを検証した記事は見たことがないので、個人的にはAlt属性の影響力に確証があるというわけでもありません。</p>



<p class="wp-block-paragraph">また先程の論文時点では<cite>『Yahoo!』</cite>・<cite>『Bing』</cite>・<cite>『DuckDuckGo』</cite>ではAlt属性を参照していないことが分かっています（Ferraz, 2015）。</p>



<h2 class="wp-block-heading"><span id="toc3">JavaScriptでWordPressに実装する方法</span></h2>



<p class="wp-block-paragraph">しかし、少しでも影響があるなら最小限の手間で両方指定しておきたいものです。</p>



<p class="wp-block-paragraph">残念ながらまだJavaScriptのDOM（Document Object Model）の知識が浅く一からの記述は難しかったので、ChatGPT 3.5とともに修正しながら作成することにしました。</p>



<p class="wp-block-paragraph">そこで得られたのが以下のコードです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>var images = document.querySelectorAll('figure img');
images.forEach(function (img) {
  if (!img.alt) {
    var figcaption = img.parentElement.querySelector('figcaption');
    if (figcaption) {
      img.alt = figcaption.textContent || figcaption.innerText;
    }
  }
});</code></pre></div>



<p class="wp-block-paragraph">意外にシンプルな内容なので、汎用性は高いと思います。</p>



<p class="wp-block-paragraph">日本語にすると以下のような操作を行っています。</p>



<ol class="wp-block-list">
<li>ページ内のすべての<code>figure</code>要素内の<code>img</code>要素を取得します。 取得された要素はNodeListオブジェクトとして<code>images</code>変数に格納されます。</li>



<li><code>images</code>変数に対して<code>forEach</code>メソッドを使用して、各要素に対して指定された関数を実行します。</li>



<li>各<code>img</code>要素のAlt属性が存在しない場合に分岐処理を行います。</li>



<li><code>img</code>要素に対して<code>parentElement</code>メソッドと<code>querySelector</code>メソッドを使用して、img要素の親要素である<code>figcaption</code>要素を取得し、その中から最初に見つかった要素を<code>figcaption</code>変数に格納します。</li>



<li><code>figcaption</code>変数が存在する場合に処理を行います。</li>



<li><code>img</code>要素のAlt属性に、<code>figcaption</code>要素のテキストコンテンツを設定します。<code>textContent</code>が存在すればそれを使用し、存在しない場合は<code>innerText</code>を使用します。これは、ブラウザによってはどちらか一方しかサポートしていないことがあるためです。</li>
</ol>



<p class="wp-block-paragraph">WordPressの場合は、このスクリプトを編集画面の左にあるメニューバーの「外観」→「テーマファイルエディター」に行き、「テーマファイル」という見出しの下にある「javascript.js」に貼り付ければ動作します。</p>



<p class="wp-block-paragraph">なお、WordPressなどのCMS（Contents Management System）を利用している場合、HTMLのコードが膨大なため、以下のように本文が含まれるid属性が &lt;main&gt; に含まれるものに限定する方が処理が早いです。</p>



<p class="wp-block-paragraph">セレクターは<code>querySelectorAll()</code>と<code>getElementById()</code>の2種類が存在しますが、1つのIDを指定する場合は<code>getElementById()</code>を使用するほうが、処理が早いです。</p>



<p class="wp-block-paragraph">更に以下のコードでは<code>document.addEventListener</code>メソッドを使用することで、完全にロードされるまで待機してからスクリプトを実行するようにしています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>document.addEventListener('DOMContentLoaded', function () {
  var main = document.getElementById('main');
  if (main) {
    var images = main.querySelectorAll('figure img');
    images.forEach(function (img) {
      if (!img.alt) {
        var figcaption = img.parentElement.querySelector('figcaption');
        if (figcaption) {
          img.alt = figcaption.textContent || figcaption.innerText;
        }
      }
    });
  }
});</code></pre></div>



<h2 class="wp-block-heading"><span id="toc4">Alt属性がうまく指定できているか確認する方法は？</span></h2>



<p class="wp-block-paragraph"><span class="marker-under-red"><strong>うまくAlt属性が指定できているかは<cite>『Google Search Console』</cite>を確認することで分かります。</strong></span></p>



<p class="wp-block-paragraph"><cite>『Google Search Console』</cite>を利用するには自サイトのURLを予め登録し、投稿した記事もクロール済みにしておく必要があるのでご注意ください。</p>



<p class="wp-block-paragraph">登録されている場合は確認したい記事のURLを「～内のすべてのURLを検査」と書かれている検索フォームに張り付けて検索してください。</p>



<p class="wp-block-paragraph">検索後、表示されたページの「クロール済みのページ」をクリックすればGooglebotが認識したHTMLが右側に表示されます。</p>



<p class="wp-block-paragraph">この右側のコード内を一度クリックして、キーボードで <kbd>Ctrl + F</kbd> を押せば検索窓が開くのでここで「alt=」を検索すると、画像のalt属性の指定が確認できます。</p>



<p class="wp-block-paragraph">うまく上記のスクリプトが動作していればalt属性にテキストが追加されているはずです。</p>



<h2 class="wp-block-heading"><span id="toc5">この方法のメリットとデメリットは？</span></h2>



<p class="wp-block-paragraph">この方法のメリットとして勿論、そもそもの目的通り画像のキャプションにテキストを入力すると、自動的にalt属性が指定されるというのがあります。</p>



<p class="wp-block-paragraph">WordPress（バージョン6.4.2現在）の仕様として画像をビジュアルエディターから追加すると、画像のプロパティの「タイトル」の内容が自動的に挿入されるので、プロパティのタイトルを指定していれば、全て自動で入力することが可能になりそうです。ただ、私は別の用途でこのプロパティを使用しているので行っていません。</p>



<p class="wp-block-paragraph">もう一つの副産物として感じたのはきちんと画像のキャプションにテキストを追加する習慣がつくということです。</p>



<p class="wp-block-paragraph">いままで、「別に画像があればサイトを見に来た人には分かるし、キャプションの追加は面倒だからいいか～。」とユーザエクスペリエンスだけを考えて雑に画像を貼り付けてしまうことも多かったですが、SEO向上というメリットも加わるとなると、かなり真面目に、しかも的確な内容になるように入力する癖がつきました。</p>



<p class="wp-block-paragraph">デメリットに関しては基本的には無いと思っていますが、JavaScriptで動的にコンテンツを生成するという特性上、クローラーがJavaScriptの実行を行わなかったり、実行が遅すぎる場合はうまく認識することができなかった場合は指定できていないかもしれません。JavaScriptなどを多用してサイト自体が重くなっている場合は注意しましょう。</p>



<p class="wp-block-paragraph"><strong>上記のスクリプトでは既にAlt属性が入力されている場合は、そのAlt属性が優先されるようになっているので後からキャプションとAlt属性を別の内容にしたくなっても問題なく反映されます。</strong>したがって、Alt属性を個別に指定したい場合は上述のようにビジュアルエディターの右サイドバーから指定しましょう。</p>



<p class="wp-block-paragraph">もし、Alt属性の入力が面倒だと思っている人はぜひ試してみてください！</p>



<h2 class="wp-block-heading"><span id="toc6">PHPでfigcaptionの内容をAlt属性に追加する方法（2026年6月2日追記）</span></h2>



<p class="wp-block-paragraph">以前は上記までのJavaScriptを使用していましたが現在はWordPressへの理解度が上がり使用していません。</p>



<p class="wp-block-paragraph">JavaScriptはページスピードへの悪影響が大きいことが分かっていたのでJavaScriptの使用は極力減らしています。</p>



<p class="wp-block-paragraph">現在は以下のPHPでこの処理は行っています。これから同じことをしたい人は以下を利用してください。</p>



<p class="wp-block-paragraph">なお、<code>function_exists('trp_translate')</code> は「TranslatePress」という自動翻訳WordPressプラグインを使用していないサイトでは不要です。逆にTranslatePressを使用しているサイトではページごとの言語で画像にAlt属性を追加してくれるので素晴らしいコードです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>add_action('template_redirect', function () {

    ob_start(function ($html) {

        /**
         * figcaption または 空alt が無ければ即return
         */
        if (
            strpos($html, '&lt;figcaption') === false ||
            strpos($html, 'alt=""') === false
        ) {
            return $html;
        }

        return preg_replace_callback(
            '/&lt;figure\b[^&gt;]*&gt;.*?&lt;\/figure&gt;/isu',
            function ($m) {

                $figure = $m[0];

                /**
                 * 空altが無ければスキップ
                 */
                if (strpos($figure, 'alt=""') === false) {
                    return $figure;
                }

                /**
                 * figcaption取得
                 */
                if (
                    !preg_match(
                        '/&lt;figcaption\b[^&gt;]*&gt;(.*?)&lt;\/figcaption&gt;/isu',
                        $figure,
                        $cap
                    )
                ) {
                    return $figure;
                }

                $caption = wp_strip_all_tags($cap[1]);

                /**
                 * 区切り前のみ
                 */
                $caption = preg_split('/[｜|]/u', $caption)[0];

                /**
                 * TranslatePressで現在言語へ翻訳
                 */
                if (function_exists('trp_translate')) {

                    $caption = trp_translate(
                        $caption,
                        null,
                        false
                    );
                }

                $caption = esc_attr(trim($caption));

                /**
                 * alt置換
                 */
                return preg_replace(
                    '/alt=(["\'])\s*\1/isu',
                    'alt="' . $caption . '"',
                    $figure,
                    1
                );

            },
            $html
        );

    });

});</code></pre></div>



<h2 class="wp-block-heading"><span id="toc7">引用文献</span></h2>



<p class="wp-block-paragraph" itemscope="" itemtype="https://schema.org/Book" itemprop="citation">Bigham, J. P., Brudvik, J. T., &amp; Zhang, B. (2010). Accessibility by demonstration: enabling end users to guide developers to web accessibility solutions. In A. Barreto, &amp; V. L. Hanson (Eds.), <cite itemprop="name">Proceedings of the 12th international ACM SIGACCESS conference on Computers and accessibility</cite> (pp. 35-42). Association for Computing Machinery. ISBN: 9781605588810, <a rel="noopener" target="_blank" href="https://doi.org/10.1145/1878803.1878812">https://doi.org/10.1145/1878803.1878812</a></p>



<p class="wp-block-paragraph" itemscope="" itemtype="https://schema.org/ScholarlyArticle" itemprop="citation">Craven, T. C. (2006). Some Features of “Alt” Texts Associated with Images in Web Pages. <cite itemprop="name">Information Research: An International Electronic Journal</cite>, <em>11</em>(2), 250. ISSN: 1368-1613, <a rel="noopener" target="_blank" href="https://informationr.net/ir/11-2/paper250.html">https://informationr.net/ir/11-2/paper250.html</a></p>



<p class="wp-block-paragraph" itemscope="" itemtype="https://schema.org/ScholarlyArticle" itemprop="citation">Ferraz, R. (2015). Exploring web attributes related to image accessibility and their impact on search engine indexing. <cite itemprop="name">Procedia Computer Dcience</cite>, <em>67</em>, 171-184. <a rel="noopener" target="_blank" href="https://doi.org/10.1016/j.procs.2015.09.261">https://doi.org/10.1016/j.procs.2015.09.261</a></p>
		<div class="wpulike wpulike-heart "><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button" aria-label="いいねボタン" data-ulike-id="11010" data-ulike-nonce="af96ecd43c" data-ulike-type="post" data-ulike-template="wpulike-heart" data-ulike-display-likers="" data-ulike-likers-style="popover" class="wp_ulike_btn wp_ulike_put_image wp_post_btn_11010"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
