技術SEOの基礎
このページで学ぶこと
Section titled “このページで学ぶこと”- 技術SEOが検索順位を直接保証するものではないこと
- クロール、レンダリング、インデックス、検索結果表示の基本
- URL、内部リンク、HTTPステータス、canonical、robots、サイトマップの役割
- JavaScriptサイトで主要コンテンツ・リンク・メタ情報を扱う際の注意
- PMが要件・テスト・公開後監視へ落とし込む方法
検索エンジンへページが表示されるまでには、複数の段階があります。
flowchart LR
D[URLを発見] --> C[クロール・取得]
C --> R[HTML・リソースを解釈・レンダリング]
R --> I[インデックス候補として処理]
I --> S[検索クエリに応じて表示]
技術SEOは、検索エンジンが重要なページを発見し、アクセスし、内容・関係・正規URLを理解できるようにする技術的な土台です。
一方、検索結果で高く評価されるかは、
- コンテンツの有用性
- 検索意図との一致
- 信頼性
- 競合
- リンク
- ユーザー体験
- 鮮度
- 検索システム
等、多くの要因に左右されます。
「この技術対応をすれば順位が上がる」と保証しません。
検索エンジンの基本的な流れ
Section titled “検索エンジンの基本的な流れ”検索エンジンは主に次からURLを見つけます。
- 既に知っているページのリンク
- XMLサイトマップ
- 外部サイトのリンク
- Search Console等からの情報
- リダイレクト
重要ページが、サイト内の通常リンクから到達できるようにします。
クローラーがURLへHTTPリクエストを送り、HTML・画像・CSS・JavaScript等を取得します。
- DNS
- HTTPS
- サーバー応答
- robots.txt
- HTTPステータス
- リダイレクト
- 応答速度
- WAF・Bot制御
がクロールへ影響します。
レンダリング・解釈
Section titled “レンダリング・解釈”HTMLと必要なリソースを読み、ページ内容・リンク・構造を理解します。
JavaScriptで内容を生成する場合、スクリプト取得・実行・API通信が必要になることがあります。
インデックス
Section titled “インデックス”取得したページが、検索システムの情報として処理されます。
クロールされたすべてのURLがインデックスされるわけではありません。
- 重複
- 内容が少ない
noindex- エラー
- canonical
- 品質判断
- アクセス制限
等により、登録されない・別URLが正規として選ばれる場合があります。
検索結果表示
Section titled “検索結果表示”検索クエリに応じて、インデックスされたページから結果が選ばれます。
titleやdescriptionは検索結果の表示材料になりますが、検索エンジンがクエリに応じて別のテキストを使うことがあります。
クロールとインデックスは別
Section titled “クロールとインデックスは別”「クロールさせない」と「検索結果へ出さない」は同じではありません。
| 目的 | 主な方法 | 注意 |
|---|---|---|
| クロール負荷を制御 | robots.txt | URLが外部リンク等からインデックスされる場合がある |
| HTMLページをインデックスさせない | noindex | クローラーがページを取得できる必要がある |
| 非公開情報を守る | 認証・アクセス制御 | robots.txt・noindexはセキュリティではない |
| URLを削除・移動 | 404/410、301等 | 用途に合うHTTP応答を返す |
robots.txtでブロックしたページへnoindexを書いても、クローラーがHTMLを読めず、noindexを確認できない場合があります。
秘密・検証環境は認証で保護します。
URLは、利用者・検索エンジン・分析・運用がページを識別する基盤です。
望ましい性質
Section titled “望ましい性質”- 一つのコンテンツへ安定したURL
- 人間が意味を推測しやすい
- 不要に長くない
- 階層・分類と整合
- 変更頻度が低い
- 大文字・小文字・末尾スラッシュ等のルールが一貫
- セッションID等の不要な変動値を含まない
- フィルター・並び替えURLの増殖を管理
flowchart TD
C[コンテンツ] --> U[正規URL]
U --> L[内部リンク]
U --> S[サイトマップ]
U --> K[canonical]
U --> A[計測・運用]
URLをリニューアルの見た目だけで変更すると、リダイレクト・分析・検索・外部リンク・ブックマークへの影響が増えます。
変更理由と便益を比較します。
クローラーはリンクをたどってページを発見し、サイト内の関係を理解します。
- HTMLの通常リンクとして到達できる
hrefに有効なURLがある- 重要ページが孤立していない
- アンカーテキストが目的を表す
- パンくず・カテゴリ・関連記事
- モバイルでも同じ主要リンクがある
- JavaScript操作だけでしか到達できないページがない
- リンク切れ・リダイレクト連鎖がない
検索フォームへ条件を入力しないと到達できない詳細ページは、リンク・サイトマップ等でも発見できるようにします。
HTTPステータス
Section titled “HTTPステータス”HTTPステータスは、URLの状態を検索エンジンへ伝えます。
| 状態 | 主な用途 |
|---|---|
| 200 | 正常なページ |
| 301/308 | 恒久的な移動 |
| 302/307 | 一時的な移動 |
| 404 | ページが存在しない |
| 410 | 意図的に削除され、戻らない |
| 401/403 | 認証・権限が必要 |
| 429 | リクエスト過多 |
| 5xx | サーバー・サービスのエラー |
ソフト404
Section titled “ソフト404”存在しないページで、見た目は「ありません」と表示しながら200を返す状態です。
利用者・検索エンジンへURLの状態を正しく伝えられません。
404ページをデザインしても、HTTPステータスが200なら技術的には正常ページとして応答しています。
エラーページ
Section titled “エラーページ”404ページには、
- ページがないこと
- トップ・検索・主要カテゴリ
- 問い合わせ
- 正しいHTTPステータス
を用意します。
5xxをすべてトップへ転送すると、障害を隠し、切り分けにくくなります。
リダイレクト
Section titled “リダイレクト”URLが変わったとき、利用者と検索エンジンを新URLへ案内します。
恒久的な移動
Section titled “恒久的な移動”301または308等を使います。
一時的な移動
Section titled “一時的な移動”302または307等を使います。
sequenceDiagram
participant B as ブラウザ・クローラー
participant O as 旧URL
participant N as 新URL
B->>O: 旧URLを要求
O-->>B: 301 新URL
B->>N: 新URLを要求
N-->>B: 200 コンテンツ
- 旧URLから最も対応する新URLへ直接転送
- すべてトップへ転送しない
- 複数段の連鎖を避ける
- ループを避ける
- HTTP→HTTPS、www有無、末尾スラッシュ等を統一
- リダイレクト先が200である
- 内部リンクは最終URLへ更新
リダイレクトは、古いURLの評価・利用者導線を新URLへ引き継ぐ重要な仕組みですが、内容が無関係なら適切な引継ぎになりません。
canonical
Section titled “canonical”rel="canonical"は、重複または非常に似たページ群の中で、優先する正規URLを示すシグナルです。
例:
- パラメータ違い
- 印刷用
- 同じ商品への複数経路
- www有無等の重複
- 配信先の重複ページ
flowchart LR
D1[重複URL A] --> C[正規URL]
D2[重複URL B] --> C
D3[重複URL C] --> C
- canonicalは転送ではない
- 利用者は元URLに残る
- 検索エンジンへの強制命令ではなくシグナル
- ページ内容・内部リンク・サイトマップ・リダイレクトと整合させる
- インデックスさせたいページ自身を正規として示す
- 存在しない・無関係なURLへ向けない
- JavaScriptで元HTMLと異なるcanonicalへ変更しない
URLを完全に移動したなら、canonicalだけでなくリダイレクトを使います。
robots.txt
Section titled “robots.txt”robots.txtは、主にクローラーのアクセスを管理するファイルです。
例:
- クロール不要な検索パラメータ
- 大量生成される低価値URL
- クロール負荷を抑えたい領域
robots.txtで行わないこと
Section titled “robots.txtで行わないこと”- 個人情報・管理画面の保護
- 秘密URLの非公開化
- HTMLページの確実なインデックス除外
- 不正Botの完全遮断
robots.txtは公開ファイルであり、記載したパスを誰でも読めます。
CSS・JavaScriptをブロックすると、ページの理解・レンダリングを妨げる場合があります。
noindexとX-Robots-Tag
Section titled “noindexとX-Robots-Tag”HTMLのrobots metaタグやHTTPのX-Robots-Tagで、インデックス・スニペット等を制御できます。
- サイト内検索結果
- ログイン前提で公開URLになっているページ
- 一時的なキャンペーン後のページ
- PDF等の非HTMLファイルへの制御
- 重複ページを検索結果へ出したくない場合
noindexページをサイトマップへ入れ続ける、canonicalで別の指示を出す等、矛盾を避けます。
noindexは検索結果制御であり、機密情報保護ではありません。
XMLサイトマップ
Section titled “XMLサイトマップ”サイトマップは、検索エンジンへ重要URLを知らせるファイルです。
特に次で有効です。
- 大規模サイト
- 新規サイト
- 内部リンクが複雑
- 動画・画像・ニュース
- 更新ページを把握したい
flowchart LR
CMS[CMS・DB] --> GEN[サイトマップ生成]
GEN --> XML[XMLサイトマップ]
XML --> SC[Search Console等]
XML --> BOT[クローラー]
含めるURL
Section titled “含めるURL”- 正規URL
- 200を返す
- インデックスさせたい
- 最新のURL
- canonicalと一致
含めないURL
Section titled “含めないURL”- リダイレクト
- 404
noindex- 重複の非正規URL
- 検証環境
- ログイン専用
サイトマップ送信はクロール・インデックスを保証しません。
検索エンジンがURLを発見・処理する助けと、エラー監視の手段です。
titleとdescription
Section titled “titleとdescription”ページの主題を表し、ブラウザ・検索結果・共有等で使われます。
- ページごとに固有
- 内容を具体的に表す
- テンプレートだけで冗長にしない
- CMSで未入力・重複を防ぐ
- JavaScript実行前後で矛盾しない
meta description
Section titled “meta description”ページ内容の要約候補です。
検索エンジンが必ずそのまま表示するとは限りません。
- ページごとに意味のある要約
- 利用者が内容を判断できる
- キーワードの詰め込みではない
- 自動生成時に不自然・重複にならない
「文字数を完全に固定すれば順位が上がる」ものではありません。
見出し・本文・構造
Section titled “見出し・本文・構造”適切なHTML見出し・本文・リンクは、利用者・支援技術・検索エンジンが内容を理解する土台です。
- 一ページの主題
- 論理的な見出し
- 主要内容を画像だけにしない
- テキストで説明
- 関連ページへのリンク
- パンくず
- 表・リスト
- 日付・著者・更新情報
技術SEOとアクセシビリティ・コンテンツ設計は重なる部分があります。
検索エンジンだけに見せる隠しテキスト等は行いません。
JavaScript SEO
Section titled “JavaScript SEO”JavaScriptを使うサイトでも検索結果へ表示できますが、次の失敗点が増えます。
sequenceDiagram
participant G as Googlebot
participant S as サーバー/CDN
participant J as JavaScript
participant A as API
G->>S: URL取得
S-->>G: HTML・JS
G->>J: レンダリング
J->>A: データ取得
A-->>J: コンテンツ
J-->>G: 画面・リンク・メタ情報
- 初期HTMLに主要内容があるか
- JavaScriptが正常に取得・実行できるか
- APIがクローラーから利用できるか
- 読み込み失敗時の内容
- URLごとに固有の内容
- 通常のリンクとしてたどれるか
- title、canonical等
- 404・401等の意味あるステータス
- lazy loadが利用者操作だけに依存しないか
- robots.txtで必要リソースをブロックしていないか
Googleは動的レンダリングを長期的な推奨策としておらず、サーバーサイドレンダリング、静的レンダリング、ハイドレーション等を推奨しています。
「クローラーだけ別内容を返す」複雑な仕組みを安易に採用しません。
CSR・SSR・SSGとSEO
Section titled “CSR・SSR・SSGとSEO”主要内容がJavaScript実行後に現れる場合、レンダリング・API・エラー・初期表示を慎重に確認します。
アクセス時にHTMLを返しやすい一方、API障害、遅延、誤ステータス、キャッシュ等の問題があります。
生成済みHTMLを返しやすく、配信も単純です。
ただしCMS更新・ビルド失敗、古い内容、全ページ生成、サイトマップ更新を管理します。
ハイブリッド
Section titled “ハイブリッド”ページごとに方式を変える場合、URL一覧と生成方式を対応づけます。
SEOは方式名だけで決まらず、最終的なHTTP応答・HTML・リンク・内容で確認します。
構造化データ
Section titled “構造化データ”構造化データは、ページ内容の種類・属性を検索エンジンへ機械可読な形式で伝えます。
例:
- パンくず
- 商品
- 求人
- イベント
- 組織
- FAQ等
- ページ上で利用者へ見える内容と一致
- 適用ガイドラインを満たす
- 必須・推奨項目
- 自動生成データの正しさ
- 公開・終了日時
- CMS変更時
- 検証ツール
- 検索結果の拡張表示を保証しない
リッチリザルトを得る目的だけで、存在しない評価・価格・FAQをマークアップしません。
多言語・多地域
Section titled “多言語・多地域”複数言語・地域向けページでは、
- 言語ごとに固有URL
- ページ内容の翻訳
- HTMLの言語指定
hreflang- canonical
- 内部リンク
- サイトマップ
- 未翻訳時
- 自動転送
- 地域・通貨
を設計します。
hreflangは対応する言語・地域バージョンを伝えるための仕組みです。
各言語ページが相互に参照し、自分自身も含め、canonicalとの整合を取ります。
IP・ブラウザ言語だけで強制転送し、利用者・クローラーが他言語へ到達できない状態を避けます。
Googleはモバイル版のコンテンツを主にクロール・インデックス・ランキングへ利用するモバイルファーストインデックスを採用しています。
- モバイルにも主要本文・リンクがある
- 画像代替・構造化データが一致
- lazy loadが操作依存でない
- robots設定が同じ
- モバイルだけエラー・非表示にならない
- 折りたたみ内容も利用可能
- 広告・バナーが主要内容を妨げない
レスポンシブデザインで同じHTMLを使う場合も、CSSやJavaScriptで重要内容を消していないか確認します。
性能とCore Web Vitals
Section titled “性能とCore Web Vitals”表示性能は利用者体験と検索システムの一要素です。
Core Web Vitals等の指標は、
- 主要コンテンツの表示
- 操作応答
- レイアウトの安定
を測る材料です。
PMが確認すること
Section titled “PMが確認すること”- 対象ページ
- ラボ・実利用者データ
- モバイル・地域
- 画像・フォント
- JavaScript
- 広告・計測タグ
- API・サーバー
- 公開後の監視
指標だけを改善し、コンテンツや機能を削って利用価値を下げないようにします。
Search Console
Section titled “Search Console”Google Search Consoleでは、Google検索に関する状態を確認できます。
- 所有権
- 検索パフォーマンス
- インデックス
- サイトマップ
- URL検査
- モバイル・構造化データ等のレポート
- 手動対策
- セキュリティ問題
- 通知
- クライアント所有のプロパティ
- 制作・保守担当への権限
- 共有メール
- 公開前の所有権確認
- サイトマップ送信
- リニューアル後の監視
- 月次・変更時確認
- 退場時の権限削除
Search Consoleの数値は、GA等のアクセス解析と定義・集計が異なります。
完全一致を前提にしません。
SEOテスト
Section titled “SEOテスト”公開前に自動・手動で確認します。
URL・HTTP
Section titled “URL・HTTP”- 200、301、404等
- リダイレクト連鎖
- HTTPS
- 大文字・末尾スラッシュ
- canonical
- title
- description
- h1・見出し
- robots meta
- 言語
- 構造化データ
- 主要本文
- 内部リンク
- robots.txt
- サイトマップ
- 認証
- WAF・Bot制御
- JavaScript・API
- ページネーション
- 旧新URL
- リダイレクト
- 404
- 内部リンク
- Search Console
- 計測
ツールのクロール結果だけでなく、代表ページをブラウザ・URL検査等で確認します。
実案件ではどう考えるか
Section titled “実案件ではどう考えるか”ヘッドレスCMS+SSG
Section titled “ヘッドレスCMS+SSG”- CMSから全公開URLを生成
- title・canonical・言語
- 一覧・関連記事の内部リンク
- サイトマップ
- 404
- CMS非公開時の削除・リダイレクト
- ビルド失敗時の旧版
- 検索インデックス
を公開フローへ含めます。
検索・絞り込みサイト
Section titled “検索・絞り込みサイト”条件の組み合わせで大量URLが生成される場合、
- インデックスさせる代表ページ
- クロール不要なパラメータ
- canonical
- 内部リンク
- サイトマップ
- 内容の薄い組み合わせ
- 0件ページ
を設計します。
すべての検索結果URLを検索エンジンへ登録する必要はありません。
JavaScript描画サイト
Section titled “JavaScript描画サイト”ブラウザで見えることだけで判断せず、
- 初期HTML
- レンダリング後HTML
- APIエラー
- HTTPステータス
- リンク
- title・canonical
- URLごとの内容
を確認します。
PMチェックリスト
Section titled “PMチェックリスト”- SEOをクロール・インデックスの土台と、コンテンツ評価に分けて説明している
- 重要ページのURL一覧と発見経路を把握している
- URL命名・末尾スラッシュ・www・HTTPS等のルールを決めている
- 重要ページへ通常の内部リンクで到達できる
- URLの状態に合う200・301・404・401・5xx等を返している
- ソフト404、リダイレクト連鎖・ループを検査している
- canonical、内部リンク、サイトマップ、リダイレクトが整合している
- robots.txtを非公開・noindexの代わりに使っていない
-
noindexページをクロール可能にし、サイトマップから除外している - サイトマップへ正規・200・インデックス対象URLだけを含めている
- title・description・見出しをページ内容とCMSモデルへ対応させている
- JavaScript実行前後の主要本文・リンク・メタ情報を確認している
- CSR・SSR・SSGを方式名でなく最終HTTP・HTMLで検証している
- 構造化データを可視内容・公開状態と一致させている
- 多言語URL、canonical、hreflang、内部リンクを整合させている
- モバイルでも主要内容・リンク・メタ情報が同等である
- Search Consoleの所有・権限・サイトマップ・監視担当を決めている
- 公開前クロールと公開後のインデックス・検索流入監視を計画している
よくある誤解・失敗
Section titled “よくある誤解・失敗”「XMLサイトマップを送ればすべてインデックスされる」
Section titled “「XMLサイトマップを送ればすべてインデックスされる」”サイトマップは発見を助けるヒントです。品質、重複、noindex、canonical、エラー等により登録されない場合があります。
「robots.txtでブロックすれば検索結果から消える」
Section titled “「robots.txtでブロックすれば検索結果から消える」”URLが外部から知られている場合、説明なしで検索結果に出る可能性があります。インデックス除外はnoindex、非公開情報は認証を使います。
「canonicalを付ければ旧URLから新URLへ移行できる」
Section titled “「canonicalを付ければ旧URLから新URLへ移行できる」”canonicalは正規URLのシグナルであり、利用者を転送しません。恒久移動では301等を使います。
「SSRならSEO対策は完了」
Section titled “「SSRならSEO対策は完了」”title、リンク、ステータス、canonical、内容、速度、重複等が必要です。SSRでも誤実装は起きます。
「検索順位の下落は技術SEO担当のミス」
Section titled “「検索順位の下落は技術SEO担当のミス」”移行・競合・検索意図・コンテンツ・季節・アルゴリズム等の要因があります。技術状態と内容・市場を分けて調査します。
理解度チェック
Section titled “理解度チェック”Q1. クロールとインデックスの違いは何ですか。
Section titled “Q1. クロールとインデックスの違いは何ですか。”回答と解説
クロールはクローラーがURL・リソースを取得すること、インデックスは取得・解釈した内容を検索システムの候補として処理することです。クロールされても登録されない場合があります。Q2. robots.txtとnoindexの主な役割の違いは何ですか。
Section titled “Q2. robots.txtとnoindexの主な役割の違いは何ですか。”回答と解説
robots.txtは主にクロールを制御し、noindexはページを検索インデックスへ登録しないよう伝えます。noindexを読むにはページをクロールできる必要があります。Q3. canonicalと301リダイレクトの違いは何ですか。
Section titled “Q3. canonicalと301リダイレクトの違いは何ですか。”回答と解説
canonicalは重複ページ群の優先URLを示すシグナルで、利用者を転送しません。301はURLが恒久的に移動したことを伝え、利用者・クローラーを新URLへ転送します。Q4. JavaScriptサイトで確認するSEO上の重要事項を挙げてください。
Section titled “Q4. JavaScriptサイトで確認するSEO上の重要事項を挙げてください。”回答と解説
主要本文、リンク、title、canonical、HTTPステータス、API・JSの取得、エラー時、URLごとの固有内容、robotsによるリソース遮断等です。Q5. サイトマップに含めるべきURLはどのようなURLですか。
Section titled “Q5. サイトマップに含めるべきURLはどのようなURLですか。”回答と解説
200を返し、正規URLで、インデックスさせたい最新のURLです。リダイレクト、404、noindex、重複の非正規URLは除外します。- Google Search Central「SEO Starter Guide」
https://developers.google.com/search/docs/fundamentals/seo-starter-guide
クロール・理解・検索表示を改善する基礎的な公式ガイド。 - Google Search Central「Crawling and indexing」
https://developers.google.com/search/docs/crawling-indexing
robots、サイトマップ、canonical、リダイレクト、JavaScript等の公式資料一覧。 - Google Search Central「JavaScript SEO basics」
https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics - Google Search Central「Robots.txt Introduction」
https://developers.google.com/search/docs/crawling-indexing/robots/intro - Google Search Central「Canonical URL」
https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls - Google Search Central「Build and submit a sitemap」
https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap