Google に記事を見落とされない
SSR Blog の SEO 失敗から学んだこと
Astro + PostgreSQL で Blog を構築した際の SEO の各判断とその理由、そして記事が検索結果から消えかけた落とし穴を紹介します。
SSR Blog の SEO はなぜ静的サイトと違うのでしょうか?
私たちは何をしたのでしょうか?
動的 sitemap から robots.txt まで 5 つの層を補い、それぞれに明確な利用者を想定しました。
sitemap-posts.xml は DB から公開済み記事をリアルタイムで取得し、build 時に自動で patch して取り込みます: sitemap-index.xmlhttp://localhost と https://blog.joneshong.com が重複と判定されるのを防ぎます/admin/ と /api/をブロックします。2 つの sitemap を指定します私たちはどうやって問題に気づいたのでしょうか?
最初から設計できていたわけではありません。sitemap がどこからも参照されていない、読了時間が 73 分になる、Nginx subpath のページが真っ白になる——この 3 つの問題にぶつかって補いました。
sitemap-posts.xml どこからも参照されていませんでした
@astrojs/sitemap が sitemap-index.xml を生成する時点では静的ページしか含まれません。動的な sitemap-posts.xml は無視されていました。対処法:build 後に sitemap-index を自動で patch し、posts sitemap を追加します。
学んだこと:自動化ツールがすべての case をカバーするとは限りません。SSR の動的ページは手動で漏れを補う必要があります。
自分の head を貼り付けて確認
上のリストには 6 項目あり、そのうち 3 項目はサイトをクロールせずに検証できます。自分の記事のどれか 1 つの <head> ソースコードを貼り付けるだけです。canonical、hreflang、JSON-LD の 3 項目はすべてブラウザー内で解析し、何も送信しません。残る 3 項目(sitemap への登録、robots.txt、TTFB)は実際にあなたのドメインへリクエストを送る必要があり、ブラウザーのクロスサイト制限では対応できません。その 3 項目は、上の prompt を AI に渡してクロールしてもらってください。
確認するのは「貼り付けた文字列」であって、公開中のページではありません。ブラウザーの DevTools の Elements パネル(JS 実行後の DOM)を貼り付けると、クローラーが見ているものと結果が異なる可能性があります。クローラーと同じ内容を確認するには、「ページのソースを表示」(view-source)を使ってください。
あなたの AI Agent にコピー
記事を公開すれば Google に見つかると思っていても、実は存在を知られていないことがあります——SSR blog のページは runtime に生成されますが、@astrojs/sitemap が拾うのは build 時の静的ページだけです。動的な記事は sitemap に書き込まれません。meta tag が欠けているならせいぜい順位が下がる程度でも、インデックスされなければ検索結果から完全に消えます。
以下を AI に貼り付けてください。一般的な知識で答えさせず、実際にあなたのサイトをクロールし、この記事のリストと照合して、何が欠けているかを突き止めてもらいます:
関連する記事
この 5 本の記事はそれぞれ 1 つの判断に対応しており、隠れたコストのたとえから hreflang のエラー率 67% というデータまで扱っています。
| 記事 | 重要な理由 |
|---|---|
| Apideck: Your MCP Server Is Eating Your Context Window | 「隠れたコスト」というたとえの着想源 |
| SEO for Astro: How to Make the Fastest Framework Also the Smartest | Astro SEO の実装に関する包括的なガイド |
| JSON-LD Blog Post Example | BlogPosting schema の実装例 |
| Multilingual SEO and Hreflang Guide | 67% というエラー率のデータの出典 |
| How to Improve Core Web Vitals | SSR のパフォーマンスを最適化する具体的な方法 |
SEO はエンジニアリングであり、まじないではない
すべての判断には理由があり、すべての失敗には教訓があります。
SSR Blog の SEO は meta tag を設定すれば終わりではなく、継続して改善するエンジニアリングです。
問題 1:動的な記事が sitemap に載らない
→ 手動で補う sitemap-posts.xml
問題 2:SSR にキャッシュがない
→ 静的ページは prerender + 動的ページは SSR
問題 3:多言語 SEO は間違いやすい
→ hreflang 双方向 + x-default
検証:Google Search Console で手動送信 + 監視
// まとめ
Astro SSR + 自動 SEO pipeline
登録漏れなし、重複なし、遅延なし