GoogleはJavaScriptを読むことはできるが。
Googleの進化は早いもので、「JavaScriptフレームワークは検索に弱い」と言われたのは今は昔。JavaScriptをちゃんと読み込み、レンダリング後をインデックスしますので、今では検索結果に表示するためだけにServerSideRendering
やpre-rendering
をする必要はなくなりました。
ただ、その一方で、Googleのクローラーで採用されているJavaScriptのバージョンは低いです。ES5を使ってる模様。ES6以降を使って書いているJavaScriptコードは、Googleのクローラーは認識しない可能性があります。
AngularはES5への互換をデフォルトでは外している
AngularにはES5互換のためにスターターテンプレートにsrc/polyfills.ts
が内包されています。これを使うと、ES5との互換がサポートされます。しかしいつからかすっかり失念したのですが(最初からだったかも)、ほとんどの互換をコメントアウトされています。
「ほとんどのブラウザはES6をサポートしてるんだから、わざわざ後方互換のためのpolyfillsをimportしてしまうとバンドルサイズが大きくなる」というのはわかるのですが、大変なことにこのことにより、GoogleのクローラーはAngularのプロジェクトを読み込むことができません。
GoogleのクローラーがどのようにあなたのWebサイトを表示しているか確認する「Fetch as Google」というツールが公開されているのですが、初期の何も設定しないままWebにあげた場合、Googleのクローラーは以下のように認識します。
![スクリーンショット 2018-08-08 17.31.20.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F100460%2F9b8eea3b-15f4-751d-0338-9941c7c5faf1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=10e0e403dfb42a39e854db6cda74cac6)
真っ白が表示されていますよね。つまりは、Webサイトのコンテンツを読み込めていないということです(おそらくJavaScriptエラーで処理が中断してる)。
もちろん、Webアプリケーションなどで「別に読み込ませる必要ないし」というシチュエーションは多いとは思うのですが、普通にWebサイトをPWAでつくって公開することなどあると思いますので、Googleのクローラーに認識させる方法を紹介しておきます。
src/polyfills.ts
の31行目のコメントアウトを解除してください。
- //import 'core-js/es6/array';
+ import 'core-js/es6/array';
これだけで、Googleのクローラーはあなたのサイトを認識できるようになります。
![スクリーンショット 2018-08-08 17.36.11.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F100460%2F46080bab-70ba-6c23-ca90-1c1375b019e0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e8587e8da6ab726f8eec4b9c85f2ae37)
Ionic v4 + Angularで弊社Webサイトをリニューアルした時に気づきまして、時間が経ってしまっていたので念のため、本日(2018年8月8日)に再度検証を行いましたが、しっかりと表示されていました。
「Googleのクローラーに認識させるためには、polyfillsの一部を有効化させる」。
何かの機会でお役に立てましたら幸いです。