こんにちは、Yahoo!ニュースでエンジニアを担当している角沖です。
本記事では今年2022年にYahoo!ニュースにて観測されたSEOに関する問題とその対応方法について紹介します。ある時期にソフト404が大量発生しており、その対策を行いました。
SEOとは
SEO(Search Engine Optimization)は日本語で「検索エンジン最適化」と呼ばれます。詳しい内容については本記事では触れませんが、検索エンジンは「そのウェブサイトがユーザーに質の高いコンテンツを提供しているか」を判断軸に検索結果の掲載順位を決めています。具体的には、検索エンジンのクローラーが各サイトにアクセスしページ情報を取得、その内容を分析しインデックスが作成され、それに従って検索結果の表示順が決定されます。このときの評価に使われる項目は多岐にわたり(コンテンツの内容やtitleタグの内容、metaタグ、サイトマップ、Core Web Vitalsなど)、これらの改善を行うことで検索結果での掲載順位の向上を目指すことをSEO対策と言います。
このようにSEO対策を行うことで検索結果での掲載順位の上昇、ひいては検索エンジンからの自サイトへの流入増が期待できます。このため、SEO対策は非常に重要なものとなっています。
Yahoo!ニュースではユーザーエクスペリエンス向上のためCore Web Vitalsの改善などにも取り組んでいます。こちらは弊社エンジニアの喜楽が書いた過去記事が詳しいためそちらをご参照ください。
Google Search Consoleとは
記事の中でGoogle Search Consoleという言葉も出てくるため、先に紹介します。Google Search ConsoleはGoogleの検索エンジンでの自サイトの評価を閲覧できるツールです。Yahoo!ニュースでは主にCore Web Vitalsの確認や、検索パフォーマンスの確認に利用しています。詳細は公式ドキュメントをご参照ください。
観測された問題1:急増した「HTTPSが評価されていません」
さて、本題に入ります。2022年10月中旬、Yahoo!ニュースのGoogle Search Consoleを見ていると、「HTTPSが評価されていません」という項目が急増しているのに気が付きました。
これまでほぼ0件だった「HTTPSが評価されていません」の対象ページ数が見たことない数になっていました。ですが全く心当たりがありません。「これらのページはHTTPSで配信されていません。」とありますが、Yahoo!ニュースではHTTPでのリクエストはすべてHTTPSにリダイレクトされるため、すべてHTTPSで配信されています。(こちらに関しては弊社の過去記事をご参照ください)
この画面の下部に、HTTPSが評価されていない対象ページのURLが一覧で表示されています。それらを確認するとほぼ全てがニュース検索ページ( https://news.yahoo.co.jp/search )でした。
ニュース検索ページでは、ユーザーの方が検索したいキーワードを入力すると、そのキーワードに該当する記事の一覧が表示されます。以下は「大阪」というキーワードで検索を行った結果のページの例です。
HTTPSが評価されていないURLは、そのニュース検索ページのものがほとんどだったのですが、目についたのはそのクエリパラメータです。ニュース検索ページはクエリパラメータで検索キーワードを指定しています(例: p=yahoo
)。その検索キーワードがHTTPSと評価されていないページのURLではhttps://news.yahoo.co.jp/search?p=hogefugapiyo
のような、確実にそのクエリに該当する記事はないだろう、というものが大量に表示されていました。
観測された問題2:同時期にソフト404も急増
対処法検討のためGoogle Search Console ヘルプのHTTPSレポートのページを見ていたのですが、ニュース検索ページで特に該当しそうな対処法はありませんでした。手探り状態になってしまったのですが、Google Search Consoleの他の項目を調査していたところ、「HTTPSが評価されていません」が急増したのと同じタイミングでソフト404という項目も急増しており、これまでの1.5倍程度になっていました。
この画面の下部にも同様に、ソフト404とみなされたページのURLの一覧が表示されているのですが、そのURLは「HTTPSが評価されていません」と同じ、該当する記事はないであろう検索キーワードが指定されたニュース検索ページでした。https://news.yahoo.co.jp/search?p=hogefugapiyo
ソフト404とは
公式ドキュメントを見ると以下のようにあります。
ページをリクエストしたところ、ソフト 404 とみなされるレスポンスが返されました。つまり、404 HTTP レスポンス コードではなく、ユーザーフレンドリーな形の「見つかりませんでした」というメッセージが返されました。
つまり、「404でレスポンス返ってはいないけども、実質404だよね?」という意味合いでしょう。
ニュース検索ページでは、検索キーワードに該当する記事が見つからなかった場合、HTTPレスポンスコードとして200 OK
を返しつつ、以下の画面を表示します。
この画面にある「見つかりませんでした」という文言をクローラーが検知したか、コンテンツ量が少ないなどが原因でソフト404と判定したと考えられます。
なぜ「HTTPSが評価されていません」が増えたのか
Google Search Console ヘルプのHTTPSレポートのページを見ると以下2つの内のどちらか、もしくは両方に起因して「HTTPSが評価されていません」が増えたと考えられます。
HTTP URL に対応する HTTPS URL が存在しない。対応する HTTPS URL が存在しない場合(404 エラー)や、他の 4XX エラー(認証が必要など)または 5XX レベルのエラー(サーバーの問題)が発生した場合は、URL が [HTTPS が評価されていません] としてラベル付けされます。
今回404エラーは返しておらず、検索エンジンの方でソフト404と判定されましたが、ソフト404も404エラー相当とみなされた可能性があります。
Google がなんらかの種類のエラーを大量に検出したために、キューに追加されたサイト内 URL の処理を停止した。キューに追加された残りの URL は、[HTTPS が評価されていません] としてラベル付けされます。
こちらのケースで発生したとすると、ソフト404に該当するページへのクロールが急に大量発生したことがエラーと認識され、処理が停止されたと考えられます。
ソフト404への対応
(1) 2段階に分けての対応
これまで、ニュース検索ページは検索エンジンにインデックスされるようmetaタグなどの設定を行っていたのですが、それでもGoogle検索からの流入が少なかったということもあり、対応方法検討の早い段階で、ニュース検索ページへのインデックスは不要である、という結論がチームで出ていました。このため、robots.txtでDisallow: /search
を指定すれば対応完了で良さそうですが、これを初手で行ってはまずい理由がありました。
robots.txtでDisallow: /search
を指定するとクローラーはこのURLのページをクロールしなくなります。そのため、すでにソフト404として評価されているURLの再評価が不可になり、そのままソフト404判定として残ってしまう可能性がありました。また、robots.txtでのクロール禁止設定はクローラーによるクロールを禁止するだけで、別のWebページにリンクがあるとインデックスされてしまいます。
そのため今回の対応では次のように二段階に分けての対応を行うようにしました。
- ニュース検索ページで検索結果が0件の場合に
<meta name="robots" content="noindex">
を<head>
タグ内に埋め込む - ソフト404と評価されたURLの再評価を行い、ソフト404のページ数が減少した後にrobots.txtに
Disallow: /search
を設定する
(2) noindexを埋め込む
まずは検索結果が0件の場合に<meta name="robots" content="noindex">
を<head>
タグ内に埋め込むようにすることで、ソフト404となっていたページを検索エンジンのインデックスの対象外となるようにしました。
(3) robots.txtでのクロール除外
noindexの埋め込みから1~2週間後くらいにGoogle Search Consoleを確認すると、「HTTPSが評価されていません」のページ数が大幅に減少していました。
これが確認できた後に、robots.txtにDisallow: /search
を設定し、ニュース検索ページ自体をクロールの対象外にしました。
404 NOT FOUNDを返すようにするのではだめ?
上記とは別に、対応案として検索結果が0件の場合はHTTPレスポンスコードを200 OK
ではなく404 NOT FOUND
で返すという案もありましたが、こちらは見送りとなりました。
前述のとおり、Googleの検索エンジンとしてはクロールしたURLが404 NOT FOUND
を返した場合は、そのURLは「HTTPS が評価されていません」にラベリングされます。このためソフト404判定されているからと言って404 NOT FOUND
を返すようにしても問題の解決にはなりませんが、いい機会なのでこういったケースでは200 OK
を返すべきか、404 NOT FOUND
を返すべきか考えてみました。
これは難しい問題で正解があるわけではないと思うのですが、以下のような判断からこういったケースでは200 OK
を返したほうが良いと考えました。200 OK
と404 NOT FOUND
の意味は下記のとおりです。
200 OK
の意味: リクエストが成功したことを示す404 NOT FOUND
の意味: 指定したリソースが見つからなかったことを示す
ニュース検索ページは「検索」ページです。該当記事がないような検索キーワードで検索された場合でも、それは検索した結果が0件であり、リクエスト自体は成功したことを意味しています。ニュース検索ページにおけるリソースは検索機能そのものだと考えられ、今回のケースではこの検索機能自体へのアクセスは正常にされていました。以上のことから、検索結果が0件であっても404 NOT FOUND
を返すのではなく、200 OK
を返す現状の実装のままがよさそうでした。
今回の事象を放置していた場合の考察
今回はGoogle Search Consoleを見ていたために気づけた事象でしたが、この事象に気づかず放置していた場合どうなっていたのでしょうか? おそらく検索エンジンでのYahoo!ニュースの評価が下がり、検索結果の掲載順位が大幅に低下していた可能性もあります。
公式ドキュメントを確認すると、ソフト404はユーザーの利便性を損ねるものとして記載されていました。
200 (success) ステータス コードを返したのに、ページにエラー メッセージやなんらかのエラーを表示または示唆することは、ユーザーの利便性を損ねます。
このため、ソフト404に該当するページが多いサイトはサイト自体のクオリティが低いものとして検索エンジンに評価されると同時に、検索結果では下位の方に表示されてしまう、というのはあり得るシナリオではないでしょうか。
おわりに
今回はYahoo!ニュースで発生したSEOに関する問題について紹介させていただきました。
ニュース検索ページでソフト404になるようなURLが大量にクロールされたことがYahoo!ニュースへのSEOに悪影響を与えるための攻撃なのかどうかはわかりません。今回の事象はニュース検索ページのSEO対策不足が原因でしたが、他のサイトでも検索ページなどユーザーの入力内容に従って生成されるページで発生する可能性があります。ソフト404が発生しそうなページには<meta name="robots" content="noindex">
を仕込みつつ、robots.txtでクロールの禁止を設定することをおすすめいたします。
本記事が皆さまのご参考になれば幸いです。最後までお読みいただきありがとうございました。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました
- 角沖 陽平
- Yahoo!ニュース エンジニア
- Yahoo!ニュースのウェブページとバックエンドの開発を担当しています。最近スプラトゥーン3にハマりすぎて日常生活に支障をきたしています。