Github Pages + SPA で Google Index をめぐる戦い
SPA化
標題そのものは各所のドキュメントで問題なく行えました。
blog は Markdown を json でまとめて、SPA 側で html にレンダリングしています。しかし、めんどい。
Google Search Index
atom.xml
blog 部分は、md から json 化して index を作っているので、index を作るときについでに atom.xml を作成。
sitemap.xml
面倒なので、SPA を自前 crawler で適当になめて sitemap.xml を作成。puppeteer とても良い。
https://github.com/Bugfire/create_sitemap に自分用の設定で適当に置いてあります。
Hash based router
最初は Hash based router (http://foobar.com/#/hoge/foo みたいなやつ)を使っていましたが、Hash だけ別の場合は Google 様は同じ URL とみなすので、全ページ同じ URL となり index されませんでした。
Push state router
しょうがないので普通の router を使う。
1. 404 に index.html を置く
404.html に index.html をおいたら、全てのアクセスが一個のファイルで動くじゃん俺天才、と思ってやってみましたが、動作は
しましたが、status 404 の場合は一切 index されないという悲しい結果に。
2. 404 から index.html?url 経由で開く
ちょっと調べた感じでは、これでいけるとありましたが、自分は index されませんでした。
3. あらゆる全ての箇所に index.html を置く
大変bakaです。sitemap に存在する全ての URL に index.html をコピー。いいんです、index.html はたったの 2616 バイトなんです。sitemap がとても役に立った、いやっほ!?
4. おまけ
Github Pages は、
http://foobar.com/XXX/YYY => XXX/YYY.html
http://foobar.com/XXX/YYY/ => XXX/YYY/index.html
と区別をしよう!