静かなる名辞

pythonとプログラミングのこと

2019/03/22:TechAcademyがteratailの質問・回答を盗用していた件
2019/03/26:TechAcademy盗用事件 公式発表と深まる疑念



はてなブログの独自ドメイン化でカバレッジが切り替わらないときの対処

はじめに

 去年の秋頃、このブログを独自ドメイン化しましたが、今年に入ってもSearch Console上で古いサイトのインデックス・カバレッジが大量(数百件とか)に残ったままでした。

 思いついた方法を試したところ、さほど重要でないページ数件*1を残してカバレッジをすべて新URLに移動できました。

前提

 サイトの移転に際して、googleは以下の手順を踏むことを推奨しています。

サイトを移転する
0.サイト移転に関する基本情報を確認します。 手順の概要とユーザーや掲載順位に与える影響について確認しておきます。HTTP から HTTPS へ移転する場合は、HTTPS に関するおすすめの方法を確認してください。
1.新しいサイトを準備して、十分にテストします。
2.現在の URL から対応する新しい形式への URL マッピングを準備します。
3.元の URL から新しい URL にリダイレクトするようサーバーを設定して、サイト移転を開始します。
4.元の URL と新しい URL 両方のトラフィックを観察します。
概要: URL の変更を伴うサイト移転 - Search Console ヘルプ

 これだけだとはてなブログProの契約でやってくれる移転処置とSearch Consoleから行う手続きだけでぱっと見大丈夫なのですが、ヘルプページをよく読み込んだ結果、以下の記述を発見しました。

移転先のサイトについては、元の URL と新しい URL を含む、事前に用意した 2 つのサイトマップを送信します。このようにすると、Google のクローラが元の URL から新しい URL へのリダイレクトを検出しやすくなり、サイトの移転がスムーズに進むようになります。
3. サイト移転を開始する - Search Console ヘルプ

 あー、元のURLと新しいURLを含んだサイトマップ? そんなものが必要なんですね。

 しばらく考え込んだ結果、「googleのクローラが旧URLのクロールを試みる→301リダイレクトを検出→インデックスを切り替える」という流れで処理されるのだろう、と察しました。

 移転後、旧URLへのクロールは一日10未満という数字が続いていました。毎日10ページ処理してくれればそれでもいずれ切り替わることが期待されますが、外部リンクから来ているクローラだったりすると同じページしかクロールしてくれない訳で、クロールされなかったページは切り替わらないわな・・・。

対処

 はてなブログではサイトマップを編集できません(重要)。また、なぜか不具合があり、そもそも通常の状態でもいまいち正常に機能していなかったりする(googleがうまく読み込んでくれない)のがはてなのサイトマップです。改善してほしいのですが。

 サイトマップを頼るわけには行かないので、他の方法で旧URLをクロールさせます。理屈の上ではどうやってもいいはずです。

方法1:Fetch as Googleを使う

 Fetch as Googleを使って旧URLにクローラを巡回させます。・・・と書いておいて恐縮ですが、Fetch as GoogleというツールはSearch Consoleのバージョンアップに従って消滅しています。今はURL検査ツールというもので代替できます。

 とにかく、これらを使えば任意のページをクロールさせる(厳密にはクロールしてくれ、とお願いする)ことが可能です。ということで、何ページか送信してみたところ、それなりに効果があるような雰囲気を感じました。

 ただ、何百件もちまちま送信するのは大変ですし、やりすぎると自動操作を疑われるのか、画面上で操作できなくなる(やろうとしてもエラーになる)問題があります。数件だけ残ってしまったというのならともかく、普通の状況では使いづらいかと。

方法2:旧URLのカバレッジで表示されるページすべてへのリンクをサイト内に張る

 googleのクローラーはリンクを辿ってくれますから、理屈の上ではクロールしてほしいURLへのリンクを張ったページを作ってそのページをクロールさせれば、リンク先も見てくれます。

 ただし、この方法は若干ハイリスクです。リンクだけ載せまくったページなんて作ったらスパム認定されかねません。更に、このブログではGoogle Adsenseも使ってしまっているため、そちらの規約との兼ね合いも考慮する必要があります。

 ・・・ということで、プロフィールページの下部に載せておきました。他にコンテンツのあるページならなんとか許してもらえるでしょう。

 やり方としては、まずSearch Consoleで旧URLのインデックス・カバレッジを開き、有効なURL一覧をダウンロードします。

ダウンロードボタンは右の下矢印
ダウンロードボタンは右の下矢印

 csvで落とせるので、適当にいじってwebリンクになるようにします。私はリンクテキストをURLとしたaタグに変換したりするスクリプトを書きました(3行くらい。URLをそのまま貼ってもだいたいリンクが自動挿入されるのだが、一部パラメータなどがうまく認識されない)。できたらそのまま、好きなページに貼り付けます。

 この方法を取ったところ、次の日くらいにSearch Console上のクロールの統計情報で旧URLが猛烈にクロールされていることが確認でき、数日後には旧URLのサイトで登録されていたページが新URLのカバレッジに移動しました。成功です。

 ちなみに、プロフィールページ下部のリンクは、その後一週間ほど様子を見たあと削除しました。

懸念

 Search Console上ではすでにほとんどのページが移転できているのですが、なぜか旧URLに一定の検索流入が残っています。google検索で適当なキーワードを入れて確認した感じ、一部のページは旧URLのまま表示されてしまっているようです。

 これがキャッシュなどが一時的に残っていることによる効果なのか、変則的なことをしたせいで問題が発生しているのかは不明。

 ちなみに、これをやった直後は検索流入が1割ほど減りました。回復傾向にありますが、元の水準まで回復するかはなんとも言えない状況です。

 また、それなりのリスクもあり、上手くいく保証もないので、この記事を読んだ方は安易に試さないでください。旧URLのままでも実害は少ないですし、しばらく待てば自然に切り替わる可能性もあります。ただ、数ヶ月待っても駄目なときはこれを試す価値はあるかもしれません。

まとめ

 この方法で私のサイトの場合はうまくいきました、という報告です。一般的に使えるテクニックかどうかはまた別だと思いますが、1つの事例として参考にしてください。

追記

 切り替わらないページが多いため、旧サイトの「除外」に含まれる「クロール済み - インデックス未登録」など他の項目も載せたところ、多くのページの検索表示が新URLに切り替わりました(まだカバレッジレポートには反映されていません。3週間も止まったままなのです・・・)。

 カバレッジの表示件数と実際に有効なページ数は一致しないケースがあるようです。「ページにリダイレクトがあります」以外は疑った方が良いでしょう。

追記2

 その後経過を観察して何度か同様の措置を行い、結果的にはほぼすべてのページのインデックスを切り替えることができました(一部ゴミみたいな自動ページが旧ドメインのままだが、実害もないので無視)。

 ただし、この方法はあまりおすすめできない面があります。googleのペナルティを受ける確率が0ではないこと、新ドメインにカバレッジが切り替わっても検索順位の低下をもたらすだけで、あまり短期的なメリットがないからです(ただし新ドメインのドメインパワー向上にはつながるので、長い目で見ればメリットはあるかもしれない)。自然に切り替わるのを待った方が良いかもしれません。

*1:なぜ残ったのかは不明だが、実害もないので放置