Nuxt.jsのUniversalモードとSPAモードの大きな違い
  • 2019.07.27に公開
  • 2020.05.11に更新
  • 小ネタ集
  • 2. Nuxt.js

はじめに

この記事では、NuxtjsのUniversalモードとSPAモードの違いをざっくりと説明しています。

厳密な説明を避けていますので、認識の違いがあるかもしれません。

ご注意ください。

モードの大きな違い

Universal(ユニバーサルモード)

ssr(サーバーサイドレンダリング)を行います。

Single Page App(シングルページアプリケーションモード)

略してSPAとも言われます。

ssrを行いません。

SSR(サーバーサイドレンダリング)とは

javascriptのレンダリング方法の一つです。

言葉の通り、サーバー側でjavascriptをレンダリングしHTMLを生成します。

SSRを行わない場合

クライアント側(ブラウザ側)でjavascriptをレンダリングしHTMLを生成します。

初めて訪れたサイトで、真っ白い画面でくるくる回って待たされることありませんか?

あれはjavascriptをレンダリングし、HTMLを生成している状況です。

SSRを行うと何が嬉しいの?

  • SEO対策に有効です。

    • クローラがサーバー側でレンダリングしたHTMLを読み込むので、検索に最適な情報を送ることができます。
    • 逆にSPAモードでは、ユーザーがサイトを訪れるまでHTMLファイルは空っぽの状態です。クローラは空っぽのHTMLファイルを読みに行くので、検索に必要な情報を渡すことができません。(Googleのクローラはjsをレンダリングして読み込めるようです)
  • ユーザーを待たせません。

    • 予めサーバー側でレンダリングされていますので、直ぐにHTMLを表示することができます。

Nuxtでブログを作る場合に最適なモードは?

Universalモードです。

クローラに全ページのメタ情報やOGPの情報を正しく渡すことができます。

サーバー側でレンダリングしたHTMLの情報をクローラに渡しているからですね。

Googleクローラはjsをレンダリングしてページ毎のメタ情報を読み込んでいるようですが、TwitterやFacebookのクローラはまだ読み込めないようです。
Vue.jsで構築したSPAをNuxt.jsで書き直して静的に出力するときにコケたところ

OGPとは?

SNS上でサイトの内容を伝えるための情報のことです。

LINEでURLを貼り付けると、サイトの写真やそのURLの情報が勝手に送信されますよね。

あれはOGPの情報を読み込んで生成しています。

まとめ

SEO対策を重要視するアプリケーションでは、Universalモードで作っておけば間違いないと思います。

もちろん、SPAモードにも利点があります。

UniversalモードとSPAモードの違いをもっと知りたいという方は、この方が詳しくまとめてくれています。ご参考までに。

Nuxt.jsを使うときに、SPA・SSR・静的化のどれがいいか迷ったら - Qiita

参考

感謝いたします。(Google翻訳にも感謝いたします)

(補足)Universalモードで「document is not defined」エラーの理由

Universalモードの場合、Javascriptの命令文「document」や「window」はエラーになります。

そもそもこの命令文は、クライアント(ブラウザ)側で動くものです。

Nuxtがサーバー側でレンダリングする際に、クライアント(ブラウザ)は存在しませんので「document」や「window」は当然動きません。

よってエラーを吐き出すわけです。

ただ、全く利用できないわけではありません。

クライアント側の命令文を利用するには、<no-ssr>タグで囲むなどの方法があります。

参考

“document is not defined” in Nuxt.js - stackoverflow
[window または document が undefined のときは? - Nuxt.js](

あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる。そんな方に向けた単発・短期間メンターサービスを行っています。
独学プログラマのサービス
独学プログラマ
独学でも、ここまでできるってよ。
CONTACT
Nuxt.js制作のご依頼は下記メールアドレスまでお送りください。