Open6

ダイナミックレンダリング非推奨 by Googleの裏側を勝手に想像する(おまけ:CSRの将来)

きよしろーきよしろー

はじめに

2022/08ごろ、ダイナミックレンダリングを非推奨とする文言がGoogleのドキュメントに追加された
https://www.suzukikenichi.com/blog/google-says-dynamic-rendering-isnt-recommended-solution/

非推奨の理由に当たる部分はおそらく以下

ダイナミック レンダリングは回避策です。仕組みがより複雑になり、多くのリソースが必要になるため、推奨される解決策ではありません。
https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering?hl=ja

きよしろーきよしろー

疑問点

しかし、いくつかの疑問が残る。

仕組みがより複雑になり

Googleはダイナミックレンダリングを簡単にするために Rendertronを開発していた(ダイナミックレンダリング非推奨に伴い、このライブラリもアーカイブされた)
つまり、「ダイナミックレンダリングを簡単にする仕組みを開発していた」のにもかかわらず、「ダイナミックレンダリングは複雑になるから非推奨」と言っていることになる。何か矛盾を感じる。

多くのリソースが必要になるため

これも、RendertronをGoogle Cloudで使ってもらえばGoogleとしては儲かるはず。零細企業の開発者目線に立ってくれているのかもしれないが、わざわざ非推奨にする理由としてはいまいちに感じた。

推測の域をでないが、これらは建前で、本音となる理由は別にあるかも。

きよしろーきよしろー

本当の理由

Googleが提唱しているCore Web Vitalsが関係していそう。
大雑把な理解としては、「サイトの表示速度についての指標」で、この指標はGoogle検索の順位にも影響するらしい。

ダイナミックレンダリングは、SSRなどとくらべて、どうしても処理に時間がかかりがちで、ページ読み込みリクエストから表示までが遅くなる(という認識であってますよね??)。

つまり、ダイナミックレンダリングをしているとCore Web Vitals的には悪影響がでる。
Googleがダイナミックレンダリングを非推奨にする本当の要因ではないか。
「Core Web Vitals的に悪影響がでるから」というのを直接ドキュメントに書かないのは、Googleが検索アルゴリズムについて直接言及するのを避けているからか。

きよしろーきよしろー

それでもダイナミックレンダリングしたい

CSR onlyなアプリは、デプロイが簡単で運用も非常に楽なのでどうしても捨てがたい。
そうすると、ちょっとした動的OGPとか、SPAを解釈してくれない検索bot向けにHTMLを返したいという要件がでてきたときに、ダイナミックレンダリングをしたくなる。

ふと思ったのは、Google botがアクセスしてきたときはダイナミックレンダリングせずに、ユーザーと同じ中身スカスカHTMLを返してしまってよいのでは。

SSRと比べてCSRは初回表示の速度は劣るとはいえ、ダイナミックレンダリングよりは圧倒的に早い。Google botはSPAのサイトも(不十分だったり不安定という噂は残るものの)解釈してくれるので、もしかしたらSEO的にはダイナミックレンダリング < CSRかもしれない

きよしろーきよしろー

ダイナミックレンダリングの将来

CloudflareでPupeteerが動かせるWorkers Browser Rendering APIというものがある(現在、クローズドβ)
https://www.cloudflare.com/lp/workers-browser-rendering-api/

これを使うとエッジでのダイナミックレンダリングが簡単に実現できたりするかも。

また、今後数十年スパンでみると、スマホ端末の性能も通信環境も改善されていくので、SSRやReact Server Componentsみたいなサーバーサイドである程度処理する技術とCSRのパフォーマンス差も、どんどん小さくなっていくはず(今でも普通の通信速度があれば、SSRとCSRで人間が認知できる差は生まれない認識)。

もしかしたらCSRの価値がまた上がってくるかもしれないとか思ったり。

あと、もしかしたらTwitterとかのGoogle以外のbotもJSを解釈できるようになって、CSRでも動的OGPが実現できる時代がくるかも、という希望的観測をしていたりする。