名無しさん

重複したURLを正規のURLに統合した。

公開日: 2021-10-06 18:38:03 (5767文字)
更新日: 2021-10-06 18:34:11
サイト運営

canonical タグで正規のURLを指定しているものの、site:コマンドを見てみると、正規ではない形式のURLが3割ほど混じっていた。正規ではない形式のURL とは、wwwの有り無しや、SSL化しているにも関わらず http:// ~ 形式のURL などだ。

なお、 301リダイレクトは行っていない。

canonical タグで正規のURLを指定するだけでも、うまく処理してくれるはずだが、正規ではないURLにアクセスできたり、検索結果に表示されるのは、なんだか気持ちが悪い。

目次

現在の状況 (2021/07/24 現在)

[問題] site:コマンドを打ってみると、3割の URL が指定したとおりに処理されていないようだ。

site:コマンドの結果より、どの形式で登録されているかの内訳

上記について、サーチコンソールで調べてみると、どうやら、http:// や www付きのURLを先にクロールしたが、その時点で、正規のURL はまだ未クロールになっていた。つまり、正規のURL がないので、とりあえず http:// や www付きのURL を表示しているのだろうか?だとすれば、そのまま放置しておけば、いずれ解消するかもしれない。これは、不具合ではなく、処理途中ということか。

[問題] トップページが、https://example.com/ を指定しているのに、http://www.example.com/ が表示されている。

サーチコンソールで各パターンのトップページのURLを入力し、そのURLに対する「Google が選択した正規 URL」を調べてみると、

なぜそうなるのか?の推測

googleは、テスト的に www付きや、http:// というパターンでのアクセスを試みているのかもしれない。

googleがページを発見する仕組み
googleのクローラーはあるページを取得すると、そのページ内のリンクを取得することで、次々に新たなページを見つけ出していくという仕組みになっている。

なので、何らかの理由で www付きや、http:// というページがクロールされてしまうと、そのページ内で新たに発見するリンクは、www付きや、http:// という形式のURL になってしまう。(http ~ から記述する 絶対パス であればそういった問題は発生しないかもしれないが)

つまり、 新たなページを追加すればするほど、正規ではないURL がクロール候補としてどんどん増えていってしまう。

別々のURLと判断されるパターンを確認しておく。

ディレクトリ末尾のスラッシュ( / )のありなしは、別々の URL と見なされる。

https://developers.google.com/search/docs/beginner/seo-starter-guide?hl=ja
上記ページによると、パスとファイル名については、末尾のスラッシュによって別々の URL と見なされる。

example.com/cat
example.com/cat/

www のありなしも、別々の URL と見なされる。

example.com
www.example.com

http https も、別々に扱っているようだ。

http https は区別するかどうかは 上記ページには書かれていなかった。

http://example.com/
https://example.com/ ※googleでは、httpsを推奨

しかし、以下のページを見ると、http https は別々に扱っているようだ。
https://developers.google.com/search/docs/advanced/crawling/consolidate-duplicate-urls?hl=ja

index.php や index.html のありなし

それ以外にも、example.com/index.php , example.com/ も統一しておいた方が良さそう。

ただし、トップページに限っては、末尾のスラッシュ( / )のありなしは、同じ URL として処理されるようだ。

https://example.com
https://example.com/

https://developers.google.com/search/docs/beginner/seo-starter-guide?hl=ja
上記ページによると、「ホームページを参照する場合、ホスト名の後ろにある末尾のスラッシュは省略可能です。スラッシュの有無にかかわらず同じコンテンツに導かれるためです」とある。

また、「正規化して統一するように」とは特に書かれていなかった。特に何もしなくてもよさそう。

試しに、サーチコンソールの URL検査で、https://example.com と入力すると、https://example.com/ と、スラッシュが自動で付与された。少なくても サーチコンソール内でのトップページは、末尾のスラッシュ( / )は「あり」で統一して処理しているようだ。

https://www.suzukikenichi.com/blog/differences-between-trailing-slash-and-non-trailing-slash/
上記ページでも、「両者の違いを僕たちは気にする必要はありません。」と解説されている。

トップページ末尾のスラッシュ( / )のありなしについて、主要サイトではどう処理されているか?

以下のURLを末尾のスラッシュ( / )なしとありでアクセスしたところ、どちらもリダイレクトされる事なく、全て HTTP 200 OK ステータスが返って来た。そして、canonical の URL は、全てのサイトの末尾のスラッシュなしとありのどちらにアクセスしても「末尾のスラッシュ( / )が、有り」で記述されていた。(2021/07/23現在)

https://www.youtube.com/
https://www.nicovideo.jp/
https://www.yahoo.co.jp/
https://www.pixiv.net/
https://twitter.com/
https://www.amazon.co.jp/
https://www.rakuten.co.jp/
https://kakaku.com/
https://www.instagram.com/
https://qiita.com/

トップページの末尾のスラッシュ( / )があるかないかの扱いについては、canonical タグで正規URLを指定しておくだけで、リダイレクトはしなくても大丈夫そう。

重複したURLをこのままにしておくとどうなるのか?

canonical タグで正規のURLを指定していれば、googleの説明どおり、時間と共に正規として指定したURLに評価が統一されていくはずだ。(絶対にそうなるとは限らないが、googleに対して指示を送れる)。すると、そのうちに、正規ではないURLへのクロール頻度は下がるだろう。

とはいえ、正規ではないURLは存在しているので、確認の為にたまにはクロールが来るかもしれない。大量の正規ではないURLが増加していき、かつ、一時的かもしれないが、タイミングによってインデックスされてしまうのは、なんだか気分がスッキリしない。

google が推奨する方法

https://developers.google.com/search/docs/advanced/crawling/consolidate-duplicate-urls?hl=ja
上記によると、以下の方法を使用するようにと書かれている。また、それぞれのメリット・デメリットも書かれている。なお、何もしない場合は、google側の判断で正規のURLが決められる。

301リダイレクトで正規URLに統合する処理を追加するのが良さそう。

301リダイレクトとは?
301リダイレクトを設定すると、そのページにアクセスしても、「ページが永久に移転しました」という意味のヘッダー(通知みたいなもの)がブラウザやクロールに通知され、移転先のページへ強制的に転送される。(移転元にはアクセスできない)

移転元のURL自体は、一定期間google内部に残るのだろうが、移転した為にもう存在しないのだから、移転先のURLに上書きされていくはずだ。また、移転元のURLにはアクセスできなくなるので、上述のように、正規ではないページをクロールし、そこから正規でないURLを拾い集めることを防止できる。

以下のページには、「301 リダイレクトを使って、指定した URL よりもリダイレクト先の URL のほうが優れたバージョンであることを Googlebot に伝えます。この方法は、重複ページを廃止するときにのみ使用します。」と書かれている。
https://developers.google.com/search/docs/advanced/crawling/consolidate-duplicate-urls?hl=ja

301リダイレクトで正規URLに統合する方法。

.htaccess ファイルに以下の記述を追記した。

書き換え機能を ON にする記述

RewriteEngine On

クエリが空の時のみ、サイト内全てのURLにおいて、末尾の index.html (又は index.php) をなし に統一する。

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)index\.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]

wwwなし に統一する。

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

https に統一する。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

301リダイレクトを設定した後、どうなったか?

301 リダイレクトを設定した直後である 2021/07/26 ~ 2021/10/05 までの 71日間 の変化

数値は、サーチコンソール内のカバレッジより

エラー 0 → 0

変化なし

有効(警告あり) 0 → 0

変化なし

有効 113 → 100

内訳

つまり、正規のURLが 83 から 86 になったということ。

除外 72 → 49

内訳

site:ドメイン名での検索結果数

52 (うち、正規のURL: 32 ) ※1

54 (うち、正規のURL: 50 ) ※2

※1「似たページを除外して、検索結果をすべて表示する」だと、 57
※2 「似たページを除外して、検索結果をすべて表示する」へのリンクは無かった

まとめ

canonicalタグだけでも正しく指定してあれば問題は起きないと思うが、一時的?に正規ではないURLが検索結果に表示されたり、サーチコンソールにも表示される事がある。

正規ではないURLは、いずれ正規のURLに統合されるかもしれないが、なんだか気持ちが悪いし、本当に統合されるかもわからない。(統合処理にかかる時間はサイトによって違うかも?)

その場合は、 301リダイレクト で重複URLを強制的に統合すればよい。

301リダイレクトを行えば、リダイレクト前のURLにアクセスしても強制的に正規のURLに転送されるので、リダイレクト前のページソースが取得される事もないし、登録される事もない。


ユーザーの設定により、コメントの書き込みはできません。

関連する投稿
#サイト運営
1,535文字
394文字
#アフィリエイト#サイト運営
3,614文字
2,844文字
2,070文字
3,016文字
#サイト運営#メモ
274文字