##まえがき
株式会AncarのWebエンジニアをしている、keiと申します。
「株式会Ancar ~Advent Calendar 2019~」 11日目を担当させていただきます。
弊社は安心・安全な移動体験を届けるをモットーに
中古車の個人間売買をオンラインで行うサービス
全国の中古車からお買い得な車を検索・比較できるサービス を展開しております。
当記事では、GoogleSearchConsoleにサイトマップを登録後、発生したカバレッジエラーに対しての対応について共有させていただきます。
##おしながき
- カバレッジエラーの現状把握
- 404の調査結果
- カバレッジエラー対策
- その1
- その2
- 最終結果
カバレッジエラーの現状把握
上記サービスは、50万以上の車両詳細ページがあります。しかし、どんなにユーザーに役立つページを持っていたとしても、クローラーがページを見つけられなかったら、検索結果に表示されません。
ということで、より多くのページを検索結果に表示させたいと思い、サイトマップをGoogleSearchConsoleで登録しました。送信したサイトマップの一部
ステータスが成功になり送信できました
が、、、喜んでるのも束の間
最大で251ページも404が見つかってしまいました
エラーがたくさん見つかってしまったので、次になぜクローラーが251ページも404を返してしまったのかを調査していきました。
404の調査結果
サーバーのアクセスログとDBを調査したところ、2019年の第41週において、中古車情報取得コマンドの実行中にデータの欠損が起きていたことが判明しました
そのため、 第42週のデータがcreateされる前に
クローラーが欠損した出品ページにアクセスしエラーを吐いた。
中古車情報取得コマンドにおいて、41週目のデータ欠損が起こった一例
+---- +------+--------------+----------------------+---------------------+
| uid | week | car_make_id | created_at | updated_at | |
+-----+------+--------------+ ---------------------+---------------------+
| 1 | 40 | 7 | 2019-09-30 16:44:03 | 2019-09-30 22:25:10 |
+-----+------+--------------+----------------------+---------------------+
1 row in set, 1 warning (0.00 sec)
+---- +------+--------------+----------------------+---------------------+
| uid | week | car_make_id | created_at | updated_at | |
+-----+------+--------------+ ---------------------+---------------------+
| 1 | 42 | 7 | 2019-10-08 17:30:03 | 2019-10-08 21:55:10 |
+-----+------+--------------+----------------------+---------------------+
1 row in set, 1 warning (0.00 sec)
しかし、たとえ中古車取得コマンドで欠損が起こらなくても、 前の週にあった出品が今週なくなった
という場合に同様のエラーが起こる可能性がある。
したがって、前週にあって今週には存在しない出品について、今週のサイトマップをSearch Consoleが読み込むまでの間はクローラーが存在しない出品ページにアクセスするという状況を作り出してはならない。
カバレッジエラー対策その1
対応策として行ったことは、前の週にあった出品が今週なくなった場合、掲載終了ページを作成することで404のレスポンスコードを返さないようにする方法である。
実際に作成したページ
カバレッジエラー修正リクエスト後
GoogleSearchConsoleを見てみると、あれ?増えているではありませんか。。
カバレッジエラー対策その2
ということで、第2弾修正を行っていくことにしました。
エラー再調査
クローラーがサイトを訪れたタイミングとデータが作られた時間の比較
+---- +------+--------------+----------------------+---------------------+
| uid | week | car_make_id | created_at | updated_at | |
+-----+------+--------------+ ---------------------+---------------------+
| 4 | 41 | 5 | 2019-10-07 05:53:03 | 2019-10-07 12:43:15 |
+-----+------+--------------+----------------------+---------------------+
1 row in set, 1 warning (0.00 sec)
+---- +------+--------------+----------------------+---------------------+
| uid | week | car_make_id | created_at | updated_at | |
+-----+------+--------------+ ---------------------+---------------------+
| 4 | 45 | 5 | 2019-11-05 06:55:03 | 2019-11-06 07:25:10 |
+-----+------+--------------+----------------------+---------------------+
1 row in set, 1 warning (0.00 sec)
上記時刻を見てみると、クローラーが2019/11/04に対して、DBのcreateした時刻は2019/11/05である。
今回の場合は、41週目の次にデータが出来たのは45週目でした。
そのため、前週のデータが有り、かつ今週のデータが無い場合は掲載終了ページを表示するようにしていたが、先週だけのステータスだけだと今回みたいに過去にデータがあった場合、クローラーがきた時に404を返してしまうということが新たに判明した。
対策として、先週だけのステータスだけではなく、データが過去1週でも有り、かつ今週のデータが無い場合は掲載終了ページを表示するようにしました。
最終結果
カバレッジエラー対策その2後、再度Googleにクロールをリクエストすると、251ページもあったエラーが49ページまで減りました
残りの49ページはクロールが来るのを待っているという状況なので、404のカバレッジエラー が0件になる日もそう遠くはありません!!