「消したはずの古い記事が、なぜかまだ表示される」 この地味だけど厄介な現象に、数年間悩まされてきました。キャッシュを消してもダメ、サーバーを調べてもファイルは無い、なのに古い記事だけが幽霊みたいに生き続ける。エンジニアの友人に手伝ってもらっても原因不明のまま放置していたんですが、先日ついに真犯人を突き止めて完全に解決できたので、その全記録をシェアします。 結論から言うと、犯人は「Archivarix」というサイト復元ツールでした。同じように「削除済みの記事が表示され続ける」「重複URLでSEO評価が分散している気がする」という人は、.htaccessの中を疑ってみてください。以下、症状から解決までを順番に書いていきます。
どんな症状だったか
まず、ブログで起きていたことを整理します。- 古い記事のURL(例:/archives/4103 みたいな数字だけのやつ)にアクセスすると、数年前の当時の内容のまま記事が表示される
- でもWordPressの投稿一覧を探しても、その記事は存在しない(検索してもゴミ箱を見ても出てこない)
- 記事IDで直接編集画面を開こうとすると「編集しようとした項目はありません。削除されたのかもしれません。」と出る
- つまりWordPress的には削除済みなのに、URLを叩くと表示されるという矛盾
- 同じ内容の記事が新旧複数のURLで存在していて、SEO評価が分散していそう
そもそもなぜこうなったか(背景)
数年前、私のこのブログは一度サーバーの凍結で死にかけました。10年以上運営していたブログに、ある日「大量のスパムメールが送信されている」という指摘が入り、対応が間に合わずアカウントが一時停止。再開には「アカウントの初期化」が必要と言われ、500記事あるのに初期状態から再構築しろという、なかなか無茶な状況に追い込まれました。 慌てて別サーバーに移転したものの、ここで痛恨のミス。ダウンロードできていたのがデータベースだけで、ブログ本体のコンテンツを取得できていなかったんです。気づいた時には移管完了後。500記事が宙に浮きました。 そこで最後の手段として使ったのがArchivarixでした。これは archive.org(Wayback Machine) にキャッシュされている過去のページを吸い出して、サイトとして復元できるツールです。 これのおかげで失った記事を救出できて、ブログは息を吹き返しました。当時は本当に救世主だったんです。 そう、この救世主が、数年後に問題の種になっていた——というのが今回のオチです。 実際の当時のツイートが以下ですね。今日のピンチその② 10年以上運営している我がブログから大量のスパムメールが送られたとして、 @mixhostjp さんから対応をするようにとメールが来る。仕事で立て込んでいて返事ができずにいたら、対応期限までに対応がなかったとしてアカウントが一時停止に。そして… — 両角達平 (たっぺい)@新著『福祉大生、スウェーデンへいく』予約開始 (@tppay) July 5, 2022
犯人にたどり着くまで(潰した容疑者たち)
一度エンジニアの友人に相談したも解決できず。それから数年経ってつい先日、Claudeに記事のリライトをお願いした時についでに相談してみました。 すると、Claudeがこの原因究明劇をやってのけたのです。それらしい容疑者を一つずつ潰していきました。同じ症状の人が回り道しないよう、「これは違った」というのも含めて書いておきます。容疑者①:キャッシュ → シロ
最初に疑ったのはキャッシュです。うちのサーバー(カラフルボックス)はLiteSpeedなので、LiteSpeed Cacheプラグインで全キャッシュをパージしました。「すべてをパージ – LSCache」も「Entire Cache を空にする」も実行。……変化なし。もし単なるキャッシュなら、これで消えるはずなので、ここでキャッシュ説は脱落しました。容疑者②:凍結した旧サーバーがまだ配信している → シロ
次に、「移転前の旧サーバーがまだ生きていて、そっちが古い記事を返しているのでは?」と考えました。でも旧サーバーは凍結・停止済み。ログインしようとしても「ご利用期限を迎え、凍結から長期間が経過しているため利用できません」と出る状態。止まっているサーバーは配信できないので、これもシロ。容疑者③:CDN → シロ
CDNが古いページをキャッシュしている線も考えましたが、確認したらCDNは契約していませんでした。これも脱落。容疑者④:WordPressの投稿として残っている → シロ
「実は投稿として生きているのでは?」と、記事IDで直接編集画面を開いてみたら、「削除されたのかもしれません」のエラー。WordPressのデータベース上には本当に存在しませんでした。 容疑者が全員シロ。キャッシュでも旧サーバーでもCDNでもWordPressでもない。じゃあ一体どこから配信されているんだ……と行き詰まったところで、最後に.htaccessの中身を見ることにしました。 真犯人:.htaccess に残っていたArchivarixの設定
.htaccess(サーバーの動作を制御するファイル)を開いてみたら、こんなブロックが残っていました。 # BEGIN Archivarix
DirectoryIndex archivarix.php index.php index.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^archivarix.php$ - [L]
RewriteRule ^index.php$ /archivarix.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /archivarix.php [L]
</IfModule>
# END Archivarixこれが犯人でした。ポイントは下の2行です。RewriteRule ^index.php$ /archivarix.php [L]
RewriteRule . /archivarix.php [L]何をしているかというと、- 本来WordPressを動かす
index.phpを、Archivarixに横取りさせている - 実ファイルが存在しないリクエストを、全部
archivarix.phpに流している
/archives/4103 にアクセスすると、WordPressが「そんな記事は削除済み」と判断する前に、Archivarixが割り込んで、自分が保存しているアーカイブ版(復元した当時の記事)を返していたんです。だから「WordPress上は削除済みなのに、URLを叩くと表示される」という矛盾が起きていたわけです。キャッシュを消してもサーバーを調べても見つからなかったのは、そもそもWordPressともキャッシュとも別の仕組みで動いていたから。全部つながりました。解決手順(同じ症状の人向け)
対処自体はシンプルです。ただし.htaccessはサイト全体の表示を左右するファイルなので、慎重に進めてください。ステップ1:.htaccessをバックアップ
編集を誤るとサイトが真っ白になることがあります。作業前に現在の.htaccessの全文をコピーして手元に保存してください。何かあれば戻せます。ステップ2:Archivarixのブロックを削除
ファイルマネージャー(またはFTP)で.htaccessを開き、# BEGIN Archivarix から # END Archivarix までのブロックをまるごと削除して保存します。他の部分(WordPress、LiteSpeed、キャッシュ関連など)は触らないこと。※.htaccessは隠しファイルなので、ファイルマネージャーの設定で「非表示ファイルの表示(dotfiles)」をオンにしないと見えないことがあります。ステップ3:Archivarixの実体ファイルを削除
ブロックを消せば配信は止まりますが、サーバー上にはarchivarix.phpや、復元データが入った.content.xxxxxのようなフォルダが残っています。配信が止まったことを確認できたら、これらの実体ファイルも削除しておくと綺麗です(容量も空きます)。心配なら数日様子を見てから消してもOK。ステップ4:確認
シークレットウィンドウで問題のURL(/archives/4103など)を開いて、404になれば成功です。同時に、トップページや通常の記事が問題なく表示されるかも必ず確認してください。もし表示がおかしくなったら、ステップ1で保存した.htaccessに戻せば元通りです。ステップ5:重複URLは301リダイレクトで統合
Archivarixとは別に、WordPress内に内容の重複した記事(旧URL)が実在する場合は、Redirectionプラグインなどで正規記事へ301リダイレクトを設定して、URLを一本化しておきましょう。これでSEO評価の分散も解消に向かいます。ステップ6:Googleに知らせる
最後に、Google Search Consoleでサイトマップを再送信し、404にした旧URLがインデックスから消えるのを待ちます。反映には数週間かかることもあるので、ここは気長に。教訓
今回の一番の学びはこれです。Archivarixのようなアーカイブ復元ツールで緊急避難したあと、正式にWordPressを立て直したなら、.htaccessのArchivarix設定を必ず消しておくこと。Archivarix自体は、サイトが吹き飛んだときに記事を救出できる本当に優秀なツールです。実際、これに救われました。ただ、緊急避難用の設定を残したままWordPressを本格運用すると、今回みたいに削除済みの旧記事を配信し続けて、SEOの足を引っ張るという副作用が起きます。救世主が、数年後に悩みの種になっていたわけですね。そして犯人特定のコツとしては、「キャッシュ・旧サーバー・CDN・WordPress投稿」を全部潰しても症状が消えないなら、.htaccessの中を疑う。ここに答えがあることは意外と多いです。ファイルの中身を一度じっくり読むだけで、長年の謎が一発で解けることもあります。同じように「消したはずの記事が化けて出る」現象で悩んでいる人の助けになれば幸いです。それでは、快適なブログ運営を!

コメント