SPAリスクであるGoogle検索のインデックス崩壊のリアルな運用データを公開

#概要

SPAをFirebase Hosting等の静的コンテンツ配信サービスを利用することで、手軽にサービスを展開し、PWAにしてキャッシュすることで障害にも比較的強くなりました。
そうなるとSPAにするか従来のSSRにするかは、新規のサービスでは必須の検討事項でしょう。

SPAはJavaScriptの動作が必須であることから、SEOやOGPには工夫が必要になります。
これがSPAがSEO的に弱いといわれる所以です。
いろいろなところで、SPAはSEOに弱い、最近はGoogleのCrawlerが最新のChromeに対応したことで大丈夫という意見を見かけます。
しかし、具体的な数値で語っている記事は見かけたことがないので、今回は私が運用しているサイトの数値で語ってみます。
SPAはSEOでも大丈夫と言われていること、SPAはSEOに弱いといわれていることがより理解しやすくなるのではないかなと。
  
ちなみに公開するデータは月間10～20万PV程度の小さなサイトです:sweat_smile:

#読者対象

- SEOを意識しないといけないWeb運営者、Web開発者
- SPA、SSR、SEO、リッチリザルト、Google Analytics、Search Console等の基本を理解している。


#解説

##障害発生

何の問題もなかった数か月でしたが、ある日（10月24日）突然リッチリザルトの一つであるパンくずリストの数が減少し始めました。（パンくずリストは9月下旬に実装）

![パンくずリスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/e4034700-914e-1c16-fda7-d5c55a05f65f.png)


これを理解するには、まずSPAでパンくずリストはどうやって実装しているのかを知る必要があります。
SSRならヘッダーに書き込むだけですが、SPAではJavaScriptでページに応じて変更します。
この現象が意味しているのはJavaScriptがパンくずリストを作るに至らなかったということでしょう。

これはSPAでは致命的です。
JavaScriptがページを切り替えるSPAで動作していないということは、index.htmlしか読まれていない悲惨な状況です。
最悪なことにindex.htmlが読み込まれているため、**Search Consoleではエラーとして検出されない点です。:fearful:**
**つまり、Googleの認識としては価値のないページしかないサイトと誤認します。:scream:**

##まずはエラーチェック

エラーが出ていないかSearch Consoleで確認してみました。

![急落201910_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/99863bbe-96c0-5de7-af71-3743b61cafed.png)


時折分割したjsファイルが読み込みに失敗するときエラーが表示されますが、今回は表示されていません。
通常ならJavaScriptの処理中のエラーも表示されることから、CrawlerのJavaScriptの処理がタイムアウトした可能性が考えられます。


##ページのクロール結果をチェック

ページをGoogleのCrawlerがクロールした際の結果を確認してみました。

![急落201910_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/4791df7c-ba06-e3bc-154d-542a20aa4b78.png)

一見問題ないように見えますが、手動でクロール後の正常な場合は以下のようになります。
商品のリッチリザルトは推奨項目にハードルの高いレビュー等が含まれるため、警告ありを許容しています。

![急落201910_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/abc1ec67-098f-d8d2-6d08-7df677d310e1.png)

##アクセス数をチェック

リッチリザルトがなくなったため、10月24日以降のアクセス数の減少が懸念されます。

![アクセス数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/14940477-68cd-ed80-f842-c0cfb58d93c2.png)


現時点でOrganic Searchに大きな変化はないため、まだ影響は大きく出ていないようです。（日曜日(27日)はアクセスが少ないのが平常運転）
しかし、時間が経過すると検索順位が落ちていき、ユーザーもDescriptionの的確さの欠けるページのクリックは減少します。

掲載順位の方の低下がちょっと気になります。
この辺は大型台風だけではなくその他の原因でも落ちることがあるため、インデックス崩壊の原因とは断定できません。

![掲載順位.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310578/21709871-ed4e-fcf8-26f4-786be1633b0c.png)



##どうやって立て直すか？

CrawlerへはCrawlのリクエストしかできないため、崩壊したページをCrawlして地道にリクエストを投げるしかないでしょう。
Crawlerの自動再クロールでの復旧を期待したいですが、Crawlは正常なページと認識しているため自動復旧するにしろ長い道のりです。
（Crawlerは定期チェックしてくれますが、私のサイトでは間隔が広く、ページによっては数か月単位）
私のケースでは手動でリクエスト可能なページ数なので致命傷には至りません。
（とはいえ、キャッシュからの前回Crawl取得に10秒、再Crawlで20秒、これが1ページごとに必要、かつ1日当たりのリクエスト上限もありますが:sob:）
しかし、これは規模の大きいサイトだったらと思うと絶望しかない:scream:

29日からCrawlのリクエストを開始しましたので、どのような推移で復旧したかは再度更新予定です。


##なぜ起こったのかを推測

近いところでGoogleの検索エンジンのアップデートが実施されています。
もしかすると、これを強力に推進すべくCrawlerの1ページ当たりの時間短縮等の変化があったのではないか？というのが私の考えです。
Crawlerのクロールはあまりパワーがないため、通常のURL検査でも時間がかかります。
数か月はこのようなことはなかったので、確率的には悪くない筋かと思っています。

https://jp.techcrunch.com/2019/10/26/2019-10-25-google-brings-in-bert-to-improve-its-search-results/


#まとめ

SPAのJavaScriptの動作が必要なことから生じるリスクについて具体的に言及しました。
SEOを意識した場合、インデックスが崩壊しやすい特性がありますので、検索流入の重要性が極めて高く、ページ数やページのパターンが多いシーンでの導入には注意が必要です。
逆に検索流入の重要性が低い、もしくはページ数が少ない、パターンが少数であればSPAで十分だと思います。

個人的にSPAはこれからのWebの主流になるべき技術だと思っています。
（PWAにして軽量スマホアプリを担うことを期待）
だからこそ弱点もしっかり把握することで、適切なシーンでSPAを選択する一助になれば幸いです:relaxed: