WordPressの目次プラグインTable of Contents Plusを最新版にしたあと、すべての記事から目次が消えていました。2026年10月、PHP・WordPress・プラグインの最新化をご依頼いただいた3社のお客様・計7サイトで、実際に確認した不具合です。見つけたきっかけは、本番に反映する前の、テスト環境での事前検証でした。
原因は、「見出しの階層」の設定が古い形式で保存されたままになっていることでした。古い版は、目次に含める見出し(h1〜h6)の番号を文字として保存していました。一方、新しい版では数字として厳密に照合します。そのため、すべての見出しが対象外となり、目次を作れなくなるのです。設定を数字に直すと、目次は元に戻ります。
この不具合でやっかいなのは、エラーが1つも出ない点です。更新自体は成功し、画面の崩れもありません。それでも、目次だけが静かに消えてしまいます。この記事では当社の実例を交えながら、原因と自分で確かめる方法、直し方を説明します。
この記事の情報は2026年10月31日時点(Table of Contents Plus 202609.1)のものです。
Table of Contents Plusを更新したら目次が消えた?まず確認すること
目次が表示されていないかもしれないと感じたら、次の2つを確認しましょう。どちらも数分で確かめられます。
- 記事を開くと目次が表示されるか:以前は目次が表示されていた、見出しの多い記事を1つ開いてください。目次が見当たらなければ、この記事で扱う不具合に該当する可能性があります
- プラグインの版:管理画面の「プラグイン」から、Table of Contents Plusの版を確認してください。当社でこの不具合を確認したのは202609.1です。古い版(2016年ごろの1601など)から一気に最新版へ更新したサイトは、特に注意が必要です
設定画面の「見出しの階層」(どの見出しを目次に入れるか)も確認しておくとよいでしょう。ただし、画面に表示された内容を見るだけでは、保存値が古い形式かどうかまでは判断できません。記事を実際に開き、目次が表示されているか確かめるのが、いちばん確実です。
最新化の事前検証で見つかった目次の消失
この不具合を見つけたのは、PHP・WordPress・プラグインの最新化のご依頼で行った事前検証の最中でした。当社では本番に手を入れる前に、本番と同じ状態をテスト環境に再現し、プラグインなどを更新してから全ページを確認しています。
更新前と更新後、本番とテスト環境で全ページの目次の有無を照合したところ、更新後のテスト環境では目次が消えていることに気づきました。エラーは表示されず、ほかの部分も普段と変わらない状態でした。
そこで、同じプラグインを使っていて、すでに最新化を終えていた別のサイトを調べたところ、本番でも同じことが起きていました。
- 本番で25記事を調べたところ、目次は1つも見つかりませんでした(以前は表示されていました)
- お客様がプラグインを自動更新していたため、当社が作業する前から本番の目次が消えているサイトもありました
- いずれも、古い版(2016年ごろの1601など)から一気に最新版へ更新したサイトで起きていました
当社で確認した版は202609.1です。Table of Contents Plusは最近、All in One SEO(SEOプラグイン)の運営会社に引き継がれ、作りが大きく変わりました。10年近く前の版から最新版へ一気に更新すると、その間の変化による影響をまとめて受けることになります。
事前検証で見つかったサイトは、本番に反映する前に直せました。本番に反映するときに修正も一緒に行い、目次は更新前と同じ数のまま保てています。お客様の自動更新で消えていたサイトも含め、本番ですでに消えていたサイトは、修正用のプラグインで目次を元に戻しました(結果は後半の表のとおりです)。
正直に言えば、エラーが出ない不具合が一番こわいと感じます。エラーが表示されれば誰かが気づくものの、目次が消えただけでは、運営者にも読者にもなかなか気づかれません。

目次が消えるのはなぜ?原因は「見出しの階層」の設定
Table of Contents Plusには、「見出しの階層」という設定項目があります。h1〜h6の中から、目次に含めたい見出しを選ぶための項目です。当社ではプラグインのプログラムを読み、目次が消える原因を確認しました。
| 古い版(1601など) | 新しい版(202609.1で確認) | |
|---|---|---|
| 見出しの階層を保存する形式 | 文字としての「1」〜「6」 | 数字の1〜6であることが前提 |
| 見出しを目次に含めるかの判定 | 文字でも目次を作ることができた | 文字と数字を厳密に区別して照合する |
| 古い設定を残したまま更新すると | — | 文字の「2」は数字の2と一致しないため、すべての見出しが対象外となる |
古い版で一度でも設定を保存していると、新しい版への更新と同時に「目次に入れる見出しが1つもない」状態になるわけです。プラグイン自体は正しく動作しているので、エラーは表示されません。
反対に、投稿に目次が急に増えるケースも
サイトによっては、逆の現象も起こります。設定を一度も保存していないサイトには、新しい版の初期設定がそのまま適用されますが、その内容は古い版とは異なります。
| 初期設定 | 古い版 | 新しい版 |
|---|---|---|
| 目次の自動挿入先 | 固定ページのみ | 投稿にも挿入する |
| 目次の表示に必要な見出しの数 | 4つ以上 | 3つ以上 |
この違いによって、それまで目次がなかった投稿にも、更新後は急に目次が表示されるようになります。消える場合と違って目に見える変化ではありますが、意図せず見た目が変わる点は同じです。当社が担当したサイトでも、1サイトがこのパターンでした。
Table of Contents Plusで消えた目次を元に戻す方法
修正の考え方はシンプルです。「見出しの階層」の設定を数字に直すことで対応できます。設定を保存していなかったサイトについては、古い版と同じ初期設定を保存すると、元の表示を保てます。
設定画面で保存し直す方法もあります。ただ、新しい画面が古い形式の値を正しく読み込めるかどうかは、当社では確かめきれませんでした。そのため今回は、有効化したときに設定を1回だけ直す、小さな修正用のプラグインを作成して使いました。
- 有効化時に、見出しの階層を文字から数字へ直す
- 設定が未保存なら、古い版と同じ初期設定(固定ページのみ・見出し4つ以上)を保存する
- 管理画面の上部に結果を表示する。処理が終わったら停止し、削除する
- 古い版でも問題なく動作するため、プラグインの更新前・更新後のどちらでも使える
修正プラグインを使った結果、目次は次のように戻りました。
| サイト | 結果 |
|---|---|
| サイトA(本番) | 77記事中74記事の目次が戻った |
| サイトB(本番) | 67記事中63記事の目次が戻った |
| サイトC(検証環境) | 84記事中32記事で目次の表示を確認(見出しが3つ以上ある記事に目次を出す設定) |
| ほかの4サイト(本番に反映するときに修正) | 全ページで、目次の数が更新前と変わらないことを確認 |
残りの記事は見出しの数が少なく、もともと目次を表示する条件を満たしていないため、目次は戻っていません。
修正用のプラグインは、お問い合わせくださった方にお渡ししています。お問い合わせフォームに「Table of Contents Plusの修正プラグイン希望」とお書き添えください。ご自身で導入するのが不安な方には、設置から目次が戻ったことの確認まで、当社で対応することも可能です。
ここまでの内容をまとめると
- Table of Contents Plusを古い版から最新版(当社で確認したのは202609.1)へ更新すると、古い版で設定を保存していたサイトでは、すべての目次が消えることがある
- 「見出しの階層」が文字として保存されているのに、新しい版は数字として厳密に照合することが原因
- 設定を保存していなかったサイトでは、反対に投稿に目次が増える
- エラーが表示されないため、記事を開いて目次の有無を確認しないと気づけない
- 本番に反映する前に、テスト環境で全ページの目次の有無を照合すれば、本番で消える前に気づける
技術者向け:設定の内容と、全ページの目次の有無を確認する方法
設定の保存先は、wp_options の toc-options です。配列で保存されており、見出しの階層には heading_levels というキーが使われています。WP-CLIを使える環境では、次のコマンドで内容を確認できます。
|
1 2 |
wp option get toc-options --format=json |
出力された heading_levels が引用符つきの文字列なら、古い形式で保存されています。
|
1 2 3 |
"heading_levels":["1","2","3","4","5","6"] 古い版で保存された形(文字列) "heading_levels":[1,2,3,4,5,6] 新しい版が前提にしている形(整数) |
新しい版は in_array() の第3引数に true を渡し、見出しの番号を厳密に比較して照合します。文字列の “2” は整数の 2 と一致しないので、見出しがすべて対象から外れます。一方、toc-options 自体が存在しない(一度も保存していない)場合には新しい版の既定値が適用され、投稿への自動挿入と「見出し3つ以上」が有効になります。
当社ではページごとの目次の有無を確認するため、全ページのHTMLに目次の要素(toc_container)が含まれるかを調べ、更新前と更新後、本番と検証環境で照合しました。サイトマップなどを使ってURLの一覧を用意すれば、たとえば次の方法で数えられます。
|
1 2 3 4 |
while read url; do printf "%s %s\n" "$(curl -s "$url" | grep -c 'toc_container')" "$url" done < urls.txt |
更新前に一覧を取得しておくと、更新によって目次が消えたページをすぐに特定できます。プラグインの更新時に「機能が働いているか」まで確認するためにも使える方法です。
よくある質問
Q. Table of Contents Plusで目次が表示されない原因は、すべてこれですか?
いいえ。見出しの数が設定に届かない、目次の挿入対象となる投稿タイプではない、記事単位で目次を止めている、といった場合にも表示されません。更新をきっかけに、多くの記事の目次が一斉に消えたのであれば、この記事で紹介した原因を疑ってください。
Q. プラグインを古い版へ戻せば直りますか?
当社では古い版に戻す方法を試していません。古い版ではセキュリティの修正を受けられないため、最新版を使ったまま設定を修正する方法をおすすめしています。
Q. 自動更新を止めれば安全ですか?
自動更新を止めた場合は、セキュリティの修正が入らなくなります。大切なのは、更新後に目次やフォームなどの機能が働いているかまで確認することです。
本番の前にテスト環境で全ページを確認。最新化の事前検証からお任せください
更新の成否だけを確認していても、今回の不具合は見つけられません。当社ではPHP・WordPress・プラグインの最新化をお受けしたとき、本番に反映する前に、本番と同じ状態のテスト環境で全ページを確認する事前検証を行っています。エラーの有無だけでなく、目次やフォームなどの機能が働いているかまで更新前と更新後で照合し、問題があれば直し方を用意してから本番に反映します。反映したあとも、本番で同じ確認を行います。今回も、事前検証で見つかったサイトは本番に反映する前に直せました。
当社の保守サポートは、WordPressとプラグインの更新、毎日のバックアップ、24時間の監視に月額3,800円から対応しています。古い版のプラグインが多いサイトの最新化や、PHPの更新についてもご相談いただけます。
PHPの更新に伴うほかの問題については、PHP 7から8への移行で14サイトに起きたことにまとめています。
更新履歴
- 2026年10月31日:作成(Table of Contents Plus 202609.1。当社が担当した3社4サイトの実例)
- 2026年10月31日:見つけたいきさつの説明を、事実に合わせて修正。対象の版の書き方を、当社で確認した202609.1に統一。実例のサイト数を7サイトに訂正