背景
現在 Laravel + Vue.js で 画面数 100 未満の中規模な WEB サービスを開発しているのですが、HTML のレンダリング方法で悩んでいます。
是非、みなさんの知恵をお貸しください。
そのサービスは SEO を意識しなければならないのですが、やんごとなき事情で直近は Nuxt.js を使うことができないという縛りがあります。
しかしゆくゆくは Nuxt.js を使っていきたいので、出来れば Vue.js のコンポーネントで HTML を作成していきたいと考えています。
HTML をレンダリングする手段
このような状況で、HTML をレンダリングする手段は 3 つ考えられます。
① Blade テンプレートを用いて HTML を作成しリクエストに対してそのまま HTML を返す。
② Vue.js のコンポーネントを作成し、Blade テンプレートから JSON 文字列を渡して HTML をレンダリングする。
③ Laravel で Server Side Rendering する。
① Blade テンプレートを用いて HTML を作成しリクエストに対してそのまま HTML を返す。
一番シンプルな方法で SEO 的にも問題ない方法だと考えています。
しかし、将来的に Nuxt.js を使っていきたいのでどうしても Blade で HTML を作成することに引け目を感じてしまいます。
さらに、Lint が効かないことも Blade で HTML を作成していくことへの抵抗感を生んでいます。
② Vue.js のコンポーネントを作成し、Blade テンプレートから JSON 文字列を渡して HTML をレンダリングする。
将来的に Nuxt.js を使っていきたいと考えていて Vue.js のコンポーネントが再利用できそうなこともあり、是非 Vue.js でコンポーネントを作っていきたいと考えています。
このような形で Blade から Vue.js のコンポーネントへ JSON 文字列を渡す想定です。
しかし、SEO 的に問題がありそうだと考えています。
一瞬、何もない HTML が返されてきて JavaScript が実行されるタイミングで HTML がレンダリングされます。
Google のクローラーは JavaScript を実行すると言われていますが少し抵抗があります。
③ Laravel で Server Side Rendering する。
laravel-server-side-rendering を利用して Laravel で SSR を実現するというものです。
SSR するので SEO 的にも問題がなさそうなことと、Vue.js のコンポーネントも使えるのでアリかなと考えています。
が、採用例があまり見られないので、使ったことがある方は使用感など教えていただけると嬉しいです。。
まとめ
以上、長文になってしまい大変恐縮ですが
- ① でもこうすれば Blade で lint 使えるよ
- ② でも SEO 問題ないよ
- ③ 使ったことあるけどプロダクトで採用できるレベルで使いやすいよ
- こんな方法もあるよ
などのご意見、ご指摘をお待ちしております。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。