Google SEO 上級

静的サイト生成による独立系サイト構築:JAMstack、ビルド時間、CDN配信とSEO

JAMstackの核心は「静的」ではなく、「ビルド時に生成し、CDNで配信し、APIで動的要素を補う」ことです。500ページ以内の独立系サイトなら、HugoやEleventyで純粋な静的ファイルを生成し、Cloudflare PagesやNetlifyにデプロイすれば、LCPは1.5秒以内で安定し、サーバー月額コストはほぼゼロになります。直感に反しますが、静的サイトがSEOに強い理由は「データベースがない」という見せかけではなく、クローラーが最初のリクエストで完全なHTMLを取得できる点にあります。TTFBは100ミリ秒未満で、どのSPA方式よりも高速です。

JAMstack:从Git提交到全球CDN的四步JAMstack: from git push to global CDN in four steps 静态站不等于”只能展示” —— 用API做动态交互,用ISR做增量更新Static does not mean static — use APIs for dynamic, ISR for fresh 1 Git提交1. Git push 2 构建生成2. Build step 3 部署CDN3. Deploy CDN 4 用户访问4. User fetch Markdown/MDX/内容源Markdown / MDX / CMS 秒级触发Trigger in seconds Hugo/Next.js/11tyHugo / Next.js / 11ty 100页约30秒至2分钟100 pages: 30s-2min Vercel/Netlify/CloudflareVercel / Netlify / CF 30秒至3分钟全球生效Global in 30s-3min 边缘节点直出HTMLEdge serves static HTML LCP常低于1.5秒LCP often under 1.5s 构建时间怎么控How to control build time 增量构建:只重建变更路径Incremental build: changed paths only 图片在构建时压缩,不在线转Image optimize at build, not runtime 500页以上用Hugo比Next.js快5至10倍500+ pages: Hugo 5-10x faster than Next.js SEO天然优势Native SEO advantages 爬虫拿到完整HTML,无渲染等待Crawlers get full HTML, no wait 服务器响应时间通常低于100毫秒TTFB under 100ms typically 无数据库查询,无动态渲染开销No DB, no runtime render cost 红线:依赖实时数据(库存、报价、汇率)的页面,纯静态化会导致数据过期24小时以上Red line: real-time data (stock, price, FX) goes stale 24h+ 判断标准:页面内容在两次构建之间是否会变?会变就用ISR或客户端API拉,别硬静态化Rule: if content changes between builds, use ISR or client fetch
JAMstackの4ステップとビルド・SEOの重要指標

静的サイト生成による独立系サイト構築:JAMstack、ビルド時間、CDN配信とSEO

結論から言うと:JAMstackの核心は「静的」ではなく、「ビルド時に生成し、CDNで配信し、APIで動的要素を補う」ことです。500ページ以内の独立系サイトなら、HugoやEleventyで純粋な静的ファイルを生成し、Cloudflare PagesやNetlifyにデプロイすれば、LCPは1.5秒以内で安定し、サーバー月額コストはほぼゼロになります。直感に反しますが、静的サイトがSEOに強い理由は「データベースがない」という見せかけではなく、クローラーが最初のリクエストで完全なHTMLを取得できる点にあります。TTFBは100ミリ秒未満で、どのSPA方式よりも高速です。

1. JAMstackが解決する課題とは

JAMstackの3文字はJavaScript、API、Markupを表します。従来の構成は「ユーザーのリクエスト→サーバーがデータベースクエリを実行→HTMLをレンダリング→返却」という流れで、各ステップに時間がかかります。JAMstackはこの3ステップをビルド段階で前倒しして完了させ、デプロイ時に生成済みのHTMLファイルを世界中のCDNに配置します。ユーザーがアクセスするとCDNが直接ファイルを返し、バックエンドを経由しません。

直感に反する判断ですが、JAMstackの最大のメリットはセキュリティやコストではなく、SEOと初回表示速度です。データベースで動的に生成されるページのTTFBは通常300〜800ミリ秒で、さらにJavaScriptのダウンロードと実行を待つ必要があります。静的HTMLはCDNから直接返されるため、TTFBは100ミリ秒未満になることも多く、クローラーは完全にレンダリングされたコンテンツを取得できます。Core Web Vitalsの測定方法はこちらをご覧ください。Core Web Vitalsの最適化。

ただし静的とは「動かせない」という意味ではありません。ページ上でインタラクションが必要な部分(問い合わせフォーム、リアルタイム在庫、為替換算)はJavaScriptでAPIを呼び出し、ブラウザ側で処理します。HTMLの静的配信には影響しません。これが「APIで動的要素を補う」という意味です。CDNの選び方はこちらをご覧ください。CDNグローバル高速化。

アーキテクチャの種類 TTFB クローラーが取得する内容 サーバーコスト(月額) 適したページ種別
静的HTML+CDN 50〜100ミリ秒 完全にレンダリングされたHTML 0〜50元 記事、商品詳細、Aboutページ
SSG+ISR(Next.js) 100〜300ミリ秒 完全なHTML 200〜800元 記事+定期的に更新が必要な一覧ページ
SSR動的レンダリング 300〜800ミリ秒 レンダリング待ちが必要 1000〜5000元 ユーザー個別化、リアルタイムデータページ
SPA純フロントエンドレンダリング 20〜50ミリ秒(空のシェル) 空のHTML+JS 0〜200元 管理画面向け、マーケティングページには不向き

2. ビルド時間:ページ数が増えたときの最初のボトルネック

ページ数が少ないうちはビルド時間は問題になりません。50ページのHugoならビルドは数秒です。しかし500ページを超えると、フレームワークごとのビルド時間の差が開き始めます。Hugoは依然として30秒以内、Next.jsは3〜5分かかることもあり、Gatsbyは10分を超えることもあります。ビルド時間は2つのことに直結します。コンテンツを公開するまでの待ち時間と、誤字を1つ直すたびに数分待たされる開発体験です。

ケース1:2年で300記事を蓄積したB2BブログサイトをNext.jsで構築。記事1本のタイトルを変えるたびに全量ビルドで4分かかり、チームは頻繁な更新を避けるようになりました。解決策はNext.jsのISR(インクリメンタル静的再生成)を有効にするか、コンテンツレイヤーキャッシュに切り替えて影響を受けるパスだけを再ビルドすること。ビルド時間は4分から20秒に短縮できます。

ケース2:2000のSKUがあり、SKUごとに詳細ページを持つ製品カタログサイト。Next.jsの全量ビルドは12分かかり、毎日1回自動ビルドしています。この規模ならHugoかEleventyへの移行をおすすめします。ビルド時間は1分以内に抑えられます。画像の一括圧縮方法はこちら画像SEOとWebP。

ページ数 Hugoのビルド時間 Next.js SSGのビルド時間 推奨プラン
100ページ未満 2〜5秒 30秒から60秒 どれでも可、体験の差は小さい
100〜500ページ 5〜20秒 1〜3分 Next.jsで許容範囲、インクリメンタルビルドを有効に
500〜2000ページ 20〜60秒 3〜8分 Hugoを優先、Next.jsは大幅な最適化が必要
2000ページ以上 1〜3分 10分以上 Hugo必須、または分割ビルド

3. CDNデプロイ:コミットから全世界に反映されるまでどれくらいかかるか

JAMstackのデプロイはシンプルです。git push→プラットフォームが自動ビルド→静的ファイルを生成→世界中のCDNノードに配信。VercelとNetlifyはNext.jsとEleventyをネイティブサポートし、Cloudflare PagesはHugoと純粋な静的ファイルのサポートに優れています。コミットから全世界でアクセス可能になるまでのデプロイ時間は、通常30秒〜3分です。

ここでつまずきやすい落とし穴があります。CDNキャッシュの無効化です。製品価格を変更して再デプロイしても、一部のエッジノードに古いバージョンが残り、最長24時間キャッシュされることがあります。解決策は、デプロイ完了後にCDNの全量リフレッシュを能動的に実行するか、URLにコンテンツハッシュを付けることです(ファイル名にhashを付与、例:style.abc123.css)。新しいファイルが古いファイルを自動的に置き換えます。キャッシュ戦略の設定方法はこちらサイトのキャッシュ戦略。

具体例:海外展開する照明ブランドがNext.js SSGを採用し、200の製品ページの全量ビルドに3分かかっていました。マーケティング担当が製品画像を1枚変更し、コードをコミットして3分のビルド、さらに1分のCDN反映を待って、ようやくユーザーが新しい画像を見られる状態でした。その後ISRを有効にし、各ページ60秒で再検証する設定にしたところ、画像変更後は最短60秒で新バージョンが表示され、ビルド時間も3分から40秒に短縮されました。

デプロイプラットフォーム 無料枠 世界のノード数 ビルド時間の制限 適した用途
Vercel 100GB帯域/月 300+ 6分/回 Next.jsプロジェクト、チーム開発
Netlify 100GB帯域/月 100+ 30分/回 Hugo/Eleventy、フォーム機能
Cloudflare Pages 無制限帯域 300+ 厳密な上限なし ページ数が多く、コスト重視
自前構築+Cloudflare CDN CDNは無料、オリジンは別料金 300+ 自分で管理 カスタムビルドフローが必要

四、SEOの観点:静的サイトが本質的に有利な理由

GoogleのクローラーはJavaScriptを実行できるようになりましたが、実行時間とリソースには限りがあります。静的HTMLは最初のリクエストで完全な内容を返すため、クローラーはJSの実行を待つ必要がなく、JSの読み込み失敗で内容を取得できないこともありません。SEO上の直接的なメリットは、インデックスが速い、レンダリングエラーが少ない、構造化データが確実に読み取られることです。

もう一つの利点は、sitemapとURL構造をビルド時に一度に生成でき、データベースへの動的クエリが不要なことです。ファイル名、ディレクトリ階層、canonicalタグはすべてビルドスクリプトに固定でき、動的サイトでよくある「タグページと記事ページの内容重複」も起きません。sitemapの最適化方法はこちらXML sitemapの最適化。

ただし直感に反する点が一つあります。静的サイトがすべてのSEO指標で優れているわけではありません。内容の更新が頻繁な場合(毎日価格や在庫が変わるなど)、静的化するとデータが古くなり、ユーザーが開いたページには24時間前の価格が表示され、直帰率が上がります。こうしたページはクライアント側APIでリアルタイムに取得すべきで、静的HTMLに無理に埋め込んではいけません。

もう一つの実務的なポイントは、静的サイトの画像処理です。WordPressは画像をアップロードすると自動で複数サイズを生成しますが、Hugoや11tyではビルドスクリプトに自分で書く必要があります。この手順を忘れると、ユーザーは4000ピクセル幅の原画像をスマホでダウンロードすることになり、LCPが1.5秒から4秒に跳ね上がります。画像圧縮とフォーマット変換の設定方法はこちら画像SEOとWebP形式。

SEO項目 静的サイトの実績 動的サイトの実績 差の原因
クローラーの初回表示内容の完全性 100% 60%から90%(JS実行による) レンダリング待ちが不要
TTFB 50〜100ミリ秒 300〜800ミリ秒 データベースクエリなし
LCP 1.0から1.8秒 2.0から4.0秒 CDN直接配信+バックエンドなし
内容のリアルタイム性 低い(ビルド時のスナップショット) 高い(リクエストごとに最新) 静的は諸刃の剣
構造化データの信頼性 100% 80%から95% ビルド時にHTMLへ書き込み

FAQ よくある質問

JAMstackは従来のWordPressと比べてSEOで何が優れているのか?
優れている点は抽象的な「速さ」ではなく、三つの具体的な点です。クローラーは最初のリクエストで完全なHTMLを取得でき、JavaScriptの実行を待つ必要がありません。TTFBは通常100ミリ秒未満で、動的サイトより3から8倍速いです。構造化データはビルド時にHTMLに固定され、JSの読み込み失敗で失われることがありません。Google PageSpeedのLCP指標では、静的サイトは通常90点以上を取れ、動的サイトは最適化しても70から85点です。
ビルド時間が長すぎる場合、500ページのNext.jsで8分かかる?
3ステップで最適化します。まずNext.jsのSWCコンパイルを有効にしてTerserを置き換えると、ビルド速度が2〜3倍になります。次にnext/imageとコンテンツ層のキャッシュを使い、ビルドのたびに画像を再処理しないようにします。最後にISR(インクリメンタル静的再生成)を有効にすると、記事を1本編集してもそのパスと関連リストページだけが再生成され、全体をビルドし直す必要がありません。それでも5分を超える場合はHugoへの切り替えを検討してください。ビルド時間は通常30秒以内です。
静的サイトのコンテンツ更新はどうやってCDNに反映するのですか。手動でキャッシュを消す必要はありますか。
主要プラットフォーム(Vercel/Netlify/Cloudflare Pages)はデプロイが成功すると新しいバージョンを自動でエッジノードに配信するため、手動でキャッシュを消す必要はありません。ただし古いファイルのCDNキャッシュは最大24時間保持されます。これがCDNのデフォルトTTLです。すぐに反映したい場合は、デプロイ後にプラットフォームのAPIを呼び出してpurgeを1回実行してください。静的アセット(CSS/JS/画像)はファイル名にhashを付ける方式にすると、新しいファイル名で古いキャッシュが自動的に無効になります。
静的化すべきでないページはどれですか。
次の3種類のページは純粋な静的化に向きません。リアルタイムデータに依存するページ(在庫、見積もり、為替、配送追跡)、高度にパーソナライズされたページ(マイページ、注文状況)、アクセスがごく少ないのに更新が頻繁なページ(管理画面のレポート)です。これら3種類はSSRかクライアント側のAPI取得を使います。記事、製品詳細、About、Contact、ブログ一覧など、コンテンツ表示が中心のページは静的化に非常に向いています。
HugoとNext.js SSGはどう選べばいいですか。
ページ数とインタラクションの複雑さという2つの軸で判断します。500ページ以上でコンテンツ表示が中心のサイトならHugoを選びましょう。ビルドが速く、デプロイも簡単で、学習曲線も緩やかです。500ページ以下でReactコンポーネントによるインタラクション(製品コンフィギュレーター、言語切り替えなど)が必要ならNext.js SSG+ISRを選びます。ハイブリッド構成も一般的です。Next.jsでトップページとマーケティングページを作り、Hugoや11tyでブログを作り、ビルド成果物をまとめてCDNにデプロイします。
JAMstackをCloudflare Pagesにデプロイするのにお金はかかりますか。
Cloudflare Pagesは個人や中小チームならほぼ無料で使えます。帯域無制限、ビルド500回/月、プロジェクト50個までです。超過分は従量課金で、月額は通常10〜30ドルです。Vercelの無料枠が帯域100GB/月であるのに対し、Cloudflareの帯域無制限はアクセスの多いサイトに有利です。小規模チームで月1万PV以内なら、ほぼゼロコストです。

最後に

JAMstackは新しい概念ではありません。本質は「前もってできることはすべて前もって済ませておく」ことです。コンテンツ表示が中心のB2B独立系サイトにとって、このアーキテクチャは性能、コスト、SEOの3つを同時に満たせるため、選ばない理由はほとんどありません。唯一のハードルは、チームが「ビルド時に生成する」という働き方を受け入れることです。コンテンツを変更してもビルドを待つ必要があり、WordPressのように変更後すぐに反映されるわけではありません。

導入は最小構成から始めましょう。まずHugoかEleventyでブログ部分だけを静的サイトに移し、既存のWordPress本体はそのままにします。1か月運用して、移行前後のLCP、インデックス速度、サーバーコストを比較します。効果が明確なら、製品ページやトップページも順次移行します。この段階的な移行なら、いつでも元に戻せます。

覚えておきたい一言:静的サイトの強みは「静的」であることではなく、「クローラーとユーザーが同じ時点で同じ完全なコンテンツを受け取れる」ことです。動的レンダリングが主流の時代では、むしろこれは貴重です。

环形山
环形山 クレーター専門家

公式アカウント · 環形山 Crater

環形山(Crater)は、WordPress独立サイト開発+Google SEO+GEO全域成長に特化した海外展開支援会社で、スマートハードウェア、産業機器、SaaS、新エネルギーなどの分野を手がけています。

プロダクト能力方法論ホワイトペーパー業界レポート
965件のシェア
78件のナレッジベース