03-06_テクニカルSEO
出典: 制作部署マニュアル テクニカルSEO(自動ミラー・正本は /Users/oogushiyuuki/manual-terasu)
テクニカルSEOとは
サイトの「技術基盤」を整える施策。コンテンツ・被リンクが良くても、技術が破綻してたら検索順位は上がらない。
テクニカルSEOは「土俵」。これが整ってないとどんなSEO努力も無駄になる。
テクニカルSEO の7大要素
| # | 要素 | 重要度 |
|---|---|---|
| 1 | サイト速度(Core Web Vitals) | 最重要 |
| 2 | モバイルフレンドリー | 最重要 |
| 3 | HTTPS(SSL) | 必須 |
| 4 | クロール・インデックス可能性 | 最重要 |
| 5 | sitemap.xml / robots.txt | 必須 |
| 6 | 構造化データ | 重要 |
| 7 | URL 正規化(canonical) | 重要 |
1. サイト速度(Core Web Vitals)
ページ表示速度が遅いと、Google順位は確実に下がる。
Core Web Vitals 3指標
| 指標 | 正式名称 | 良好ライン | 内容 |
|---|---|---|---|
| LCP | Largest Contentful Paint | 2.5秒以内 | 最大要素(ヒーロー画像等)の表示時間 |
| CLS | Cumulative Layout Shift | 0.1以下 | レイアウトのズレ |
| INP | Interaction to Next Paint | 200ms以内 | 操作(クリック等)への応答速度 |
→ 3つすべて「良好」が必須。1つでも黄色・赤なら順位への悪影響あり。
計測ツール
| ツール | 用途 |
|---|---|
| PageSpeed Insights | URL入力で即測定(PC/モバイル両方) |
| Chrome DevTools | F12 → Lighthouse |
| Search Console「Core Web Vitals」 | 実ユーザーデータ |
| WebPageTest | 詳細分析 |
| GTmetrix | わかりやすい指標 |
LCP 改善ポイント
- ヒーロー画像の WebP/AVIF 化
- 画像の preload(最重要画像)
- フォントの preload
- サーバー応答速度(TTFB)改善
- CDN利用(Cloudflare等)
- 不要なJSの削減
CLS 改善ポイント
- 画像に width/height 属性明記
- 動的に挿入される要素のサイズ確保
- フォント読み込み時のレイアウトずれ防止(font-display: swap + サイズ事前指定)
- 広告領域の事前確保
INP 改善ポイント
- 重い JavaScript の削減・分割
- サードパーティスクリプトの最小化
- メインスレッドのブロック時間削減
- イベントリスナーの最適化
2. モバイルフレンドリー
モバイルファーストインデックス(2021年〜完全移行)
Google はモバイル版を主評価対象としている。PC版だけ最適化はNG。
必須対応
- レスポンシブデザイン
- viewport設定
- 文字サイズ16px以上
- タップ範囲44×44px以上
- 横スクロール発生なし
- ポップアップで本文を覆わない(特にモバイル)
viewport設定
<meta name="viewport" content="width=device-width, initial-scale=1.0">
モバイルフレンドリーテスト
- Search Console モバイルユーザビリティ
- Chrome DevTools のデバイスシミュレーター
3. HTTPS(SSL)
HTTPS化されてないサイトは順位的にも信頼的にも不利。
必須対応
- 全ページHTTPS化(http://はリダイレクトでhttps://へ)
- SSL証明書の有効性(期限切れ注意)
- 混在コンテンツ(Mixed Content)の解消(http://リソースが混ざってないか)
Cloudflareなら無料・自動
- Cloudflare Pages / Workers 使用なら SSL は自動発行・自動更新
- Let's Encrypt も無料で使える
確認方法
- ブラウザのアドレスバーで🔒鍵マーク
- DevTools の Console で Mixed Content 警告がないか
4. クロール・インデックス可能性
クロールとは
Googlebotがサイトを巡回してページを発見すること。
クロールを助ける施策
1. sitemap.xml を送信
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-05-27</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/about/</loc>
<lastmod>2026-05-27</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
- Search Console に送信
- ルートに配置(
/sitemap.xml) - 全URL列挙(最大50,000 / 50MB)
lastmodを実際の更新日に
2. robots.txt で誘導
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /internal/
Disallow: /thanks
Sitemap: https://example.com/sitemap.xml
3. 内部リンクでクローラー誘導
孤立ページ(どこからもリンクされてないページ)はクロールされにくい。
4. クロール頻度
更新頻度が高いサイトほどクロールが頻繁に。定期更新が大事。
インデックス確認方法
方法1:Search Console URL検査
- 特定URLを入力 → 「インデックス済み / 未登録」確認
- 未登録なら「インデックス登録をリクエスト」
方法2:site: 検索
site:example.com
→ Google にインデックスされてるページ一覧が出る。
方法3:Search Console カバレッジレポート
- インデックス済み / 除外 / エラー の内訳が見える
5. インデックス制御
noindex で除外
「インデックスしないでほしいページ」(サンクスページ・管理画面等):
<meta name="robots" content="noindex, nofollow">
使い時
- サンクスページ(フォーム送信後)
- 検索結果ページ
- ログインページ
- 仮公開・テストページ
NG:本番ページに noindex 残し
開発時の noindex を本番に残すと検索結果から消える致命バグ。デプロイ前に必ず確認。
canonical でURL正規化
同じ内容のページが複数URLでアクセスできる場合、「これが正規」と伝える:
<link rel="canonical" href="https://example.com/service/">
重複URLのパターン
https://example.com/とhttps://example.com/index.htmlhttp://とhttps://www.あり・なし- パラメータ付き(
?utm_source=twitter) - 大文字・小文字違い
→ 全部 canonical で正規URLを明示。
6. 構造化データ
詳細は前章(s2-c05 オンページSEO)参照。
テクニカル観点でのポイント
- JSON-LD形式推奨(Microdata/RDFaより新しい)
<head>内 or<body>内どちらでもOK- 検証:Rich Results Test
- Search Console「拡張」レポートでエラー監視
主要な構造化データ
<!-- 組織情報 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "TERASU",
"url": "https://terasu.scale-group.co.jp/",
"logo": "https://terasu.scale-group.co.jp/logo.png"
}
</script>
<!-- サイト全体 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "TERASU",
"url": "https://terasu.scale-group.co.jp/",
"potentialAction": {
"@type": "SearchAction",
"target": "https://terasu.scale-group.co.jp/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<!-- パンくず -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "ホーム", "item": "https://example.com/"},
{"@type": "ListItem", "position": 2, "name": "サービス", "item": "https://example.com/service/"},
{"@type": "ListItem", "position": 3, "name": "HP制作", "item": "https://example.com/service/web/"}
]
}
</script>
7. URL構造とリダイレクト
301リダイレクト(恒久的移転)
古いURLから新URLへのSEO評価を引き継ぐリダイレクト。
# .htaccess の例
Redirect 301 /old-page/ https://example.com/new-page/
# Cloudflare Pages の _redirects ファイル
/old-page/ /new-page/ 301
使い時
- ドメイン移管
- URL変更(サイトリニューアル)
- 重複URLの統合
302リダイレクト(一時的移転)
評価を引き継がない。「一時的に別ページを見せる」場合のみ。
NG
- リニューアルで全部302 → SEO評価が失われる
- 301を使うべき場面で302を使う
リダイレクトチェーン回避
A → B → C → D のような連鎖はNG。A → D に直接リダイレクトするように整理。
8. ページ表示速度の改善テクニック
画像の最適化
<!-- レスポンシブ画像 -->
<img
src="hero.webp"
srcset="hero-400.webp 400w, hero-800.webp 800w, hero-1600.webp 1600w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1600px"
alt="ヒーロー画像"
width="1600"
height="900"
loading="lazy"
decoding="async"
>
preload で先読み
<!-- ヒーロー画像を先読み -->
<link rel="preload" as="image" href="/hero.webp">
<!-- フォント先読み -->
<link rel="preload" as="font" href="/font.woff2" type="font/woff2" crossorigin>
<!-- 別ドメインの接続を先に確立 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
JavaScript の最適化
<!-- 通常 -->
<script src="app.js"></script>
<!-- 非同期読込(順序問わず・即実行) -->
<script src="analytics.js" async></script>
<!-- 遅延読込(HTML解析後に実行) -->
<script src="non-critical.js" defer></script>
CSS の最適化
- Critical CSS をインライン化(首画面分)
- 残りは外部読込
- 未使用CSSの削除
CDN(Content Delivery Network)
- Cloudflare(無料プランあり・最強)
- CloudFront(AWS)
- Fastly
→ 世界各地から高速配信。
9. クロール予算(Crawl Budget)
1サイトあたりのクロール回数には限度がある。
大規模サイトでは特に重要
- 数万ページ規模になると、Googlebot が全部巡回しきれない
- クロールされないページは更新が反映されない
クロール予算を効率化
| 施策 | 効果 |
|---|---|
| sitemap.xml で重要ページを優先指定 | クロール優先度UP |
| robots.txt で不要ページを Disallow | クロール無駄を削減 |
| 404ページを減らす | クロール無駄を削減 |
| 重複ページを canonical で統合 | クロール無駄を削減 |
| サーバー応答速度を上げる | 単位時間あたりのクロール数UP |
10. JavaScript SEO(SPA・React/Vue系)
注意点
- Google は JavaScript をレンダリングできるが時間差がある
- 古いクローラーは JS 未対応
対策
SSR(サーバーサイドレンダリング)
Next.js / Nuxt.js でサーバー側でHTML生成 → クローラーが即読める。
SSG(静的サイト生成)
Astro / Hugo / Eleventy 等で事前に静的HTML生成。
Dynamic Rendering(動的レンダリング)
クローラーには事前レンダリングHTML、ユーザーにはSPA、を出し分け。
→ TERASUの場合、静的HTMLサイトまたはCloudflare Pagesベースが理想(SEO最優先)。
11. hreflang(多言語対応)
複数言語版のサイトを運営する場合:
<link rel="alternate" hreflang="ja" href="https://example.com/ja/page">
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
→ Googleが「どの言語ユーザーに見せるべきか」を判断。
12. AMP(Accelerated Mobile Pages)
近年は重要度低下。Google は AMP の優遇を2021年に廃止。Core Web Vitals 改善が代替。
→ 新規サイトはAMP導入する必要なし。
13. セキュリティヘッダ
| ヘッダー | 効果 |
|---|---|
Strict-Transport-Security |
HTTPS強制 |
X-Content-Type-Options: nosniff |
MIMEタイプスニッフィング防止 |
X-Frame-Options: SAMEORIGIN |
iframe埋込制限 |
Referrer-Policy |
リファラー制御 |
Content-Security-Policy |
XSS対策 |
Cloudflare Pages での設定(_headers ファイル)
/*
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
検証ツール:securityheaders.com で A 以上を目指す。
テクニカルSEO チェックリスト
必須
- [ ] HTTPS化(http→httpsリダイレクト)
- [ ] viewport meta タグ設置
- [ ] sitemap.xml 設置 + Search Console送信
- [ ] robots.txt 設置
- [ ] canonical URL 全ページ設定
- [ ] 構造化データ(最低Organization + WebSite)
- [ ] PageSpeed モバイル90+ / PC95+
- [ ] Core Web Vitals 3項目すべて緑
- [ ] モバイルフレンドリーテスト合格
- [ ] 全画像 alt + width/height + lazy
推奨
- [ ] CDN利用(Cloudflare等)
- [ ] WebP/AVIF 画像形式
- [ ] preload で重要リソース先読み
- [ ] JS の async / defer
- [ ] セキュリティヘッダ設定
- [ ] 404ページ専用ページ
- [ ] 301リダイレクトでURL変更対応
大規模サイト向け
- [ ] クロール予算の最適化
- [ ] パンくず構造化データ
- [ ] hreflang(多言語)
- [ ] SSR / SSG の検討
テクニカルSEO NG
| NG | 結果 |
|---|---|
robots.txt: Disallow: / を本番に残す |
全ページ検索結果から消える |
本番ページに noindex 残し |
インデックス除外 |
| 開発URL を canonical 指定 | 評価が分散・誤解 |
| http のままサイト運営 | 「保護されてない通信」警告 |
| 画像WebP化なし | 表示遅延 |
| width/height なし画像 | CLS悪化 |
| JS 重すぎ | INP悪化 |
| 重複URL放置 | 評価分散 |
| 301の代わりに302 | SEO評価引き継ぎ失敗 |
参考:テクニカルSEO の良例
| サイト | 学べる点 |
|---|---|
| Stripe | Core Web Vitals 完璧 |
| Linear | SPA でも SEO 対応 |
| Vercel | Next.js による SSR/SSG |
| テクニカル全要素の教科書 |
ツール一覧
| カテゴリ | ツール |
|---|---|
| 速度測定 | PageSpeed Insights / Lighthouse / WebPageTest |
| Core Web Vitals | Search Console / CrUX |
| クロール | Screaming Frog / Sitebulb |
| 構造化データ検証 | Rich Results Test / Schema Markup Validator |
| sitemap生成 | XML-sitemaps.com |
| モバイルテスト | Search Console |
| セキュリティヘッダ | securityheaders.com |
| HTTPS検証 | SSL Labs |