Netlifyがいいと聞いて、Firebase Hostingから移行してみたときの備忘録。
NetfilyのプレレンダリングがあるのでOGP芸が楽。
昔、こんな記事を書いたけど、Functionsで頑張らなくてもよくなった。
使ってみてよかったので、移行したときにやったことをまとめてみる。
移行するときにやったこと
nuxt.config.tsなどの変更
1. Nuxtなどの公式サイトを見て設定
Firebase Hostingで設定したのとかぶっているところもあり、nuxt.config.tsは変更なし。
参考: Netlify へデプロイするには? - NuxtJS
2. _redirectsファイルの作成
Netlifyでは、index.html以外は404になるので、
SPAの場合はstatic/_redirects
というファイルを作成して、
以下の内容を記載しておく。
/* /index.html 200
参考] Rewrites and proxies | Netlify Docs
3. Netlify側の設定
あとは、Netlifyにアクセスして、 「SPA モードで生成されたサイトの場合」にも書いてあるとおりの内容をNetlifyの設定に入力すればOK。
迷わなければ、5分くらいでできて、masterにpushと更新される(´ω`)
プレレンダリング
ベータ版だけど、Netlifyでプレレンダリングしてくれる機能がある。
この記事に書いてある感じで、
「FunctionsでheadだけのHTMLを生成→リダイレクト」
としていたのが不要になる感じ。
Netlifyの画面で設定
設定は簡単で、Netlify上で設定画面で有効化すればOK。
参考: Prerendering | Netlify Docs
その他の修正点
あとは、以下の修正。
- OPGのためにrouterでリダイレクトしていた設定を削除
- 各ページでメタ情報を適切になるように変更
また、上で書いたとおり、static/_redirects
で
/* /index.html 200
これを設定しておかないとボットがアクセスしたときに404になってOGPがでない。。
(これに気づかずかなりハマった。。)
小ネタ: プレレンダリングの結果を確認する
プレレンダリングするかどうかは、UAを見て判断しているらしく、
curlだとこんな感じで、-A twitterbot
を指定するとよい。
$ curl -A twitterbot https://example.com/hoge/fuga -o fuga.html
参考: [Common Issue] Understanding and debugging prerendering
毎回、Twitter Card Validatorで確認するのはめんどくさいので、この方法だと便利。
ページが存在しないURLの対応
積読ハウマッチでは、少し特殊なことをしていて、
一部のURLはheadだけのHTMLしか存在しないページがいくつかある。
なので、その部分を修正していく。方法としては以下の感じ。
- nuxt.config.tsでrouterに、クエリパラメタ付きでリダイレクトを追加する
asyncData()
でクエリパラメタを受け取り、created()
で削除this.$router.push({ query: {} });
- Vuejs vue-router クエリパラメータの一部だけを取り除く - SIerだけど技術やりたいブログ
動的なサイトマップの対応
書籍やユーザのページなどは日々増えていくので、
サイトマップも動的に生成するようにしている。
Hostingの場合はFunctionsを呼び出せたけれど、
Netlifyに移行すると、それができないので対応が必要。
netlifyの_redirectsを使って直接Functionsへリダイレクトする方法で対応した。
こんな感じで各URLを該当のFunctionsにリダイレクトさせておく。
/sitemap https://us-central1-<project-id>.cloudfunctions.net/sitemap /* /index.html 200
sitemap-moduleだとダメだった...
sitemap-moduleで動的なページの対応方法も乗っているが、
SPAなのでgenerateされてしまう...
- 参考
カスタムドメインの設定
Netlifyの設定画面に従い、カスタムドメインを設定していく。
ALIASを設定するようにいわれるが、
お名前ドットコムはALIASを設定できないらしいので、
NetlifyのDNSを使う形で対応
参考にした記事でも書いてあるとおり、
Aレコードでもできるが、CDNを活用できないらしいので同様の対応
あとは、設定画面にも書いてあるとおり、
*.netlify.com
から設定したドメインへリダイレクトを追加しておく。
https://tsundoku.netlify.com/* https://tsundoku.site/:splat 301! /sitemap https://us-central1-<project-id>.cloudfunctions.net/sitemap /* /index.html 200
これでリダイレクトされるようになるので、あとはDNSの反映を待てばOK!
以上!!
参考にしたサイト
- Netlifyを使ってたらルートパス以外が404になった話とその解決方法 - Crieit
- Rewrites and proxies | Netlify Docs
- Prerender - Dynamic Rendering for JavaScript Website SEO
- [Common Issue] Understanding and debugging prerendering - Support / Common Issues - Netlify Community
- 【Netlify】カスタムドメインを設定する - Qiita
- Netlifyにお名前.comで取得した独自ドメインを設定する - Qiita