郭立 (leeguoo)

# 記事を削除したのに Google にしつこく残る:1つのリダイレクトが死んだリンクを固定していた

ブログの古い記事を削除したところ、zh 版はきれいに 404 になりました。しかし en/ja の URL は、すでに 404 になった zh ページへまだ 302 リダイレクトしており、Google はそれらをインデックスに残し続けていました。根本原因は削除漏れではなく、多言語フォールバックのリダイレクトが「タスク表」だけを信じ、元ページがまだ生きているかを確認していなかったことです。その結果、死んだリンクが検索エンジン内に固定されていました。この記事では、症状、調査、根本原因、小さな修正、そして削除とリダイレクトに関する2つの教訓を振り返ります。

2026年7月2日 · 記事 · 公開

このページの目次

数日前すうじつまえ、ブログを整理せいりしていて、公開こうかいすべきではなかったふる記事きじを1つ削除さくじょしました。zh ばん削除さくじょしたあと、直接ちょくせつアクセスするときれいな 404 になっていたので、これでわりだと思っていました。ところが、その記事きじは Google にしつこくのこり、en と ja の URL もクリックするとまだ「きて」いました。もう削除さくじょしたのに、なぜまだえないのでしょうか。

根本原因こんぽんげんいんをたどってみると、少し苦笑くしょういするしかありませんでした。削除さくじょしきれていなかったのではなく、1つの多言語たげんごリダイレクトがこのんだリンクを検索けんさくエンジンのなかに**固定こてい**していたのです。このしゅの「ゾンビ URL」はみやすく、しかも症状しょうじょうがかなりまぎらわしいので、記録きろくしておきます。

コンテンツを削除して 404 の墓石になったのに、302 リダイレクトの標識がまだ人を行き止まりへ送り続けている。修正は、リダイレクト前にチェックポイントを置き、到達先がまだ生きているか確認してから、リダイレクトするか直接 404 にするかを決めること

症状しょうじょう: zh は 404、en/ja は 302

このブログは3言語げんごで、1つの記事きじに zh / en / ja の3つの URL があります。削除さくじょしたのは zh ばんです。curl してみると、こうなりました。

zh  → 404                          (なくなった。正しい)
en  → 302 → /zh/posts/<slug>/      (削除したばかりの zh へ飛ぶ)
ja  → 302 → /zh/posts/<slug>/

en / ja の URL はまだのこっていて、しかも 302 で、すでに 404 になった zh ページへんでいました。ユーザーがクリックしたときの体験たいけんは「いったん転送てんそうされて、それから 404」。Google から見るみると、「この2つの URL はまだ存在そんざいしていて、ただリダイレクトしているだけ」です。そのため、インデックスにのこつづけました。コンテンツはえているのに、外側そとがわからがきれいにえていなかったのです。

調査ちょうさ: 共通きょうつうルールか、それともこの記事きじだけか

まずけるべきことがありました。すべての /en/posts/*/zh/ぶのかどうかです。もし共通きょうつうのフォールバックルールなら、ただの「んだリンクからんだリンクへのリダイレクト」で、はなしはそこまで特殊とくしゅではありません。そこで、まったく存在そんざいしない slug を1つためしました。

en/まったく存在しない-slug   → 404
en/<この記事の-slug>          → 302 → zh

ました。適当てきとうつくった slug はそのまま 404 になりますが、この記事きじの en だけが 302 になります。つまり、共通きょうつうルールではなく、この特定とくていのパスに記録きろくのこっていて、それが zh へぶよう指示しじしている、ということです。

さらに、コンテンツそう本当ほんとう削除さくじょされているかも確認かくにんしました。公開こうかい API からこの記事きじの3つの言語版げんごばんをダウンロードしようとすると、すべて「つからない」とかえりました。sitemap にもつかりません。コンテンツはたしかにえています。問題もんだいべつ場所ばしょしぼられました。リダイレクト記録きろくが、コンテンツよりながきていたのです。

根本原因こんぽんげんいん: リダイレクトが「タスク表」だけを信じ、コンテンツの生存せいぞん確認かくにんしていなかった

このブログの多言語たげんごロジックは、「ない言語げんごは、ある言語げんごへフォールバックする」というものです。/en/posts/<slug> をレンダリングするとき、en ばん存在そんざいしなければ、worker はローカライズタスク表にいきます。そこには「この記事きじ元言語もとげんごは zh で、en/ja に翻訳ほんやくする」という情報じょうほう記録きろくされています。もとが zh だとわかると、302 で /zh/posts/<slug>ばします。

問題もんだいはここでした。タスク表の「もとは zh」という記録きろくしんじたものの、その zh ページがいまきているかを確認かくにんしていませんでした。zh コンテンツを削除さくじょしたとき、このローカライズタスクの記録きろく一緒いっしょされませんでした。そのため、もとのコンテンツはないのに記録きろくだけはのこり、リダイレクトはそのままうごき、302 をたどったさきが 404 になっていました。

この bug をひとことでうと、リダイレクトがしていたのは「コンテンツがあるはずの場所ばしょ」であって、「コンテンツが実際じっさいにある場所ばしょ」ではなかった、ということです。コンテンツを削除さくじょしたり移動いどうしたりすると、このしゅのリダイレクトは固定こていされたんだリンクになります。

修正しゅうせい: ばすまえに、到達先とうたつさききているか確認かくにんする

変更へんこうはとてもちいさく、方向ほうこう明確めいかくでした。302 をめるまえに、ばそうとしているもとページが本当ほんとうに published で、private ではなく、削除さくじょもされていないかを確認かくにんします。isPublishedPostLive() というガードを追加ついかしました。

元ページは live?   はい → これまで通り 302 で飛ばす(正常な3言語フォールバック)
                   いいえ → 404 を返す(ユーザーとクローラーを行き止まりへ送らない)

デプロイにもう一度いちど curl すると、en / ja はどちらもきちんと 404 になりました。一方いっぽうで、正常せいじょうな、もとがまだ存在そんざいする3言語げんごフォールバックにはまったく影響えいきょうがありませんでした。べつの、zh ばんだけがある記事きじ意図的いとてき確認かくにんし、その en は通常つうじょうどおり 302 になり、誤爆ごばくはありませんでした。

かえれる2つの教訓きょうくん

1つ、301/302 で 404 にばすのは、直接ちょくせつ 404 よりわるい。 直接ちょくせつ 404 は、Google に「ここはもうないので、インデックスから削除さくじょして」とつたえるものです。しかし「404 にリダイレクトする」かたちだと、Google はそのリダイレクトする URL をつづ観察かんさつし、んだリンクがかえってのこりやすくなります。ページを完全かんぜんしたいなら、その URL 自身じしんにすっきり 404 または 410 をかえさせるべきです。1だんリダイレクトをはさんで「きれいに処理しょり」しようとしないことです。

2つ削除さくじょはすべての派生物はせいぶつ連鎖れんささせる。 1つのコンテンツを削除さくじょするとき、それにつながっているものは本文ほんぶんだけではありません。リダイレクト記録きろく、ローカライズの対応たいおう、sitemap の項目こうもく、キャッシュもあります。どれか1つでもわすれると、ゾンビ URL の入口いりぐちが1つえます。今回こんかいとしあなは、まさにローカライズタスク表が一緒いっしょ削除さくじょされなかったことでした。削除さくじょロジックをくときは、清掃せいそうリストをれなくつくるべきです。さらに安全あんぜん保険ほけんとしては、今回こんかい修正しゅうせいのように、あらゆる「リダイレクト」や「参照さんしょう」が使つかわれるまえに、到達先とうたつさきがまだきているかを検証けんしょうすることです。そこにあるはずだ、と仮定かていしないことです。

ものを削除さくじょするのは、想像そうぞうよりむずかしいものです。本当ほんとうにきれいにせたかどうかの基準きじゅんは、「しゅとなる記録きろくがなくなった」ことではありません。それにつながるすべてのみちをたどっても、もうどこにも到達とうたつできないことです。

← 前の記事
AI彼女をうまく作るには
次の記事 →
chrome-useのマルチエージェント隔離

コメント

コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。

最大 1000 文字。