あるマーケットプレイスのSEOチームは、インデックス規則を書き換えました。「掲載数が3件未満ならnoindex」という単純なポリシーによって、カテゴリページがGoogleから消え、再表示されるまでに数週間を要するという問題が発生したためです。ページを「noindex」から「index」へは移行できるが、逆方向には戻せない一方向の「アンロック(解除)」レコードを追加することで、サイトの掲載状況が点滅するような現象を食い止めました。

元のルールが裏目に出た理由

このクラシファイド広告プラットフォームは、膨大な数の「カテゴリ×場所」のページを生成します。ページが最初に作成された際、掲載件数が数件しかないことが多いため、チームは掲載数が最低しきい値である3件に達するまで、検索エンジンから隠すことにしました。ロジックは単純でした。

  • 掲載数 < 3件 → noindex メタタグを追加
  • 掲載数 ≥ 3件 → タグを削除(インデックスを許可)

当初、これにより価値の低い「薄いページ(thin pages)」がGoogleの検索結果に出るのを防ぐことができました。しかし、掲載期限が切れることで問題が浮上しました。ある日に5件あった掲載が翌日には2件に減ると、即座に noindex に切り替わってしまいます。Googleはその指示に従ってインデックスからURLを削除するため、そのページが築いてきたランキングも失われてしまいました。新しい掲載が追加されると再びインデックス可能になりますが、再登録されるまでには数週間を要しました。

その結果、ページがインデックスに入っては消え、また入るという「オン・オフ」のサイクルが繰り返されることになったのです。

一方向の「アンロック」による修正

根本的な欠陥は、ルールが「記憶」を持たず、リクエストのたびにしきい値を再計算していたことでした。そこでチームは、ページが初めて掲載数3件に達したタイミングを記録する、seo_unlocks という小さなデータベーステーブルを導入しました。新しいワークフローは以下の通りです。

  1. 掲載件数を確認する。 アクティブな掲載が3件以上ある場合は次へ進む。
  2. アンロック行を書き込む。 そのページのレコードを seo_unlocks に挿入する。
  3. ページを恒久的にインデックス可能として扱う。 その後、掲載数が3件を下回ったとしても、アンロック行が存在することで noindex のフローには入りません。

アンロックは一度しか書き込まれないため、ページは「noindex」から「index」へ移行できますが、逆戻りはしません。また、フィルタリングされたURL(例:価格帯を指定した検索結果)が親カテゴリのアンロックを作成できないようセーフガードを追加し、データベースの失敗がサイト全体のクラッシュを招かないよう、データベース呼び出しを try/catch ブロックで囲みました。

クロールバジェットと薄いページへの影響

noindex を使えばクロールバジェットを節約できる」というのは、よくある誤解です。Googleは依然としてページを取得し、タグを読み取り、それからインデックスから削除するプロセスを行う必要があるからです。特定のURLパターン全体に対してGoogleのリクエストを阻止したい場合は、robots.txt を使うのが正しい方法です。noindex は、Googleにページの内容は見せたいが、検索結果には表示させたくない場合にのみ使用してください。

大量の自動生成ページに依存するディレクトリ、求人サイト、マーケットプレイスにとって、教訓は明確です。「薄いページ」に関するルールには、そのページがインデックスに入る資格を得たことを記憶しておく「永続化レイヤー」を組み合わせる必要があります。この記憶がなければ、コンテンツの一時的な減少によって築き上げたランキングを失い、再登録に数週間かかることになりかねません。

まとめ

動的な掲載サイトにおいて、「掲載数が3件未満ならnoindex」という静的なルールはSEOの不安定さを招きます。一方向のアンロックレコードを追加することで、ルールに「記憶」を持たせることができ、掲載件数が変動してもページがインデックス状態を獲得し、維持できるようになります。これに、真のクロールバジェット節約のための適切な robots.txt の運用を組み合わせれば、ランキングとサーバーリソースの両方を守ることができます。