目次
- クローラビリティの最適化(項目1〜5)
- 1. robots.txtの適切な設定
- 2. XMLサイトマップの生成と送信
- 3. 内部リンク構造の最適化
- 4. URLの正規化(canonicalタグ)
- 5. クロールバジェットの最適化
- Core Web Vitalsの最適化(項目6〜10)
- 6. LCP(Largest Contentful Paint)の改善
- 7. INP(Interaction to Next Paint)の改善
- 8. CLS(Cumulative Layout Shift)の改善
- 9. 画像の最適化
- 10. JavaScriptの最適化
- メタデータとOGP(項目11〜14)
- 11. titleタグとmeta descriptionの最適化
- 12. OGPタグの設定
- 13. hreflangタグ(多言語サイトの場合)
- 14. noindex・nofollowの適切な使用
- 構造化データの実装(項目15〜17)
- 15. 記事の構造化データ
- 16. FAQ構造化データ
- 17. パンくずリストの構造化データ
- インフラとセキュリティ(項目18〜20)
- 18. HTTPS化の徹底
- 19. モバイルフレンドリー対応
- 20. ページの応答速度(TTFB)
- テクニカルSEO監視の自動化
- まとめ
SEO対策というと「キーワード選定」や「コンテンツの質」が注目されがちですが、サイトの技術的な基盤が整っていなければ、どんなに良いコンテンツも検索エンジンに正しく評価されません。
テクニカルSEOは、検索エンジンのクローラーがサイトを効率的にクロール・インデックスし、ユーザーに快適な体験を提供するための技術的な最適化を指します。本記事では、エンジニアが実装すべき20のチェック項目を、実装コード付きで解説します。
クローラビリティの最適化(項目1〜5)
検索エンジンのクローラーがサイトのページを効率的に発見・巡回できるようにする施策です。
1. robots.txtの適切な設定
robots.txtは、クローラーにクロールの可否を指示するファイルです。サイトのルートに配置します。
# /robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /tmp/
Disallow: /*?sort=
Disallow: /*?filter=
# サイトマップの場所を指定
Sitemap: https://example.com/sitemap.xml
重要なポイントは、管理画面やAPIエンドポイントなどクロール不要なURLをDisallowで指定し、パラメータ付きの重複URLも除外することです。また、意図せず重要なページをブロックしていないか定期的に確認しましょう。
2. XMLサイトマップの生成と送信
XMLサイトマップは、サイト内のURL一覧をクローラーに伝えるファイルです。
<?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-03-27</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/blog/article-1</loc>
<lastmod>2026-03-25</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Next.jsやAstroなどの主要フレームワークにはサイトマップ生成プラグインがあります。生成されたサイトマップはGoogle Search Consoleに送信し、クロール状況を監視しましょう。
3. 内部リンク構造の最適化
クローラーはリンクを辿ってページを発見します。重要なページへの内部リンクが適切に設定されているか確認しましょう。
・トップページから3クリック以内ですべての重要ページに到達できる構造にする
・パンくずリストを実装し、サイトの階層構造を明示する
・関連記事リンクを設置し、コンテンツ間の関連性を強化する
・孤立ページ(どこからもリンクされていないページ)を解消する
4. URLの正規化(canonicalタグ)
同じコンテンツが複数のURLでアクセスできる場合、canonicalタグで正規URLを指定します。
<!-- 正規URLの指定 -->
<link rel="canonical" href="https://example.com/blog/article-1" />
<!-- Next.jsでのcanonical設定 -->
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }) {
return {
alternates: {
canonical: `https://example.com/blog/${params.slug}`,
},
};
}
www有無、http/https、末尾スラッシュの有無などによる重複URLは、301リダイレクトとcanonicalタグの両方で対処しましょう。
5. クロールバジェットの最適化
大規模サイトでは、Googlebotが一定時間内にクロールするページ数(クロールバジェット)に限りがあります。低品質なページや重複ページのクロールを抑制し、重要なページにクロールバジェットを集中させましょう。
・パラメータ付きURLをrobots.txtでブロック
・薄いコンテンツのページにnoindex,followを設定
・ファセットナビゲーションで生成される大量のURLを制御
・404ページのリンクを定期的にクリーンアップ
Core Web Vitalsの最適化(項目6〜10)
GoogleはCore Web Vitalsをランキング要因として使用しています。2024年のINP(Interaction to Next Paint)導入により、3つの指標すべてが重要です。
6. LCP(Largest Contentful Paint)の改善
LCPは、ビューポート内の最大のコンテンツ要素が表示されるまでの時間で、目標値は2.5秒以内です。
<!-- LCP要素の読み込みを優先する -->
<img src="/hero-image.webp" alt="メインビジュアル"
width="1200" height="630"
fetchpriority="high"
loading="eager" />
<!-- LCPに関わるフォントのプリロード -->
<link rel="preload" href="/fonts/NotoSansJP-Bold.woff2"
as="font" type="font/woff2" crossorigin />
<!-- クリティカルCSSのインライン化 -->
<style>
.hero { /* ファーストビューに必要なスタイルだけ */ }
</style>
<link rel="stylesheet" href="/styles/main.css" media="print"
onload="this.media='all'" />
LCPの改善ポイントは、サーバーの応答時間短縮、レンダリングブロックリソースの削減、LCP要素の優先読み込みの3つです。
7. INP(Interaction to Next Paint)の改善
INPは、ユーザーの操作(クリック、タップ、キー入力)からブラウザが次のフレームを描画するまでの時間で、目標値は200ms以内です。
// 重い処理をメインスレッドから分離する
// Web Workerの活用例
const worker = new Worker('/worker.js');
worker.postMessage({ type: 'heavyCalculation', data: inputData });
worker.onmessage = (e) => {
updateUI(e.data.result);
};
// 長いタスクを分割する(yieldToMain pattern)
async function processItems(items) {
for (const item of items) {
processItem(item);
// 定期的にメインスレッドに制御を戻す
if (navigator.scheduling?.isInputPending()) {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
}
8. CLS(Cumulative Layout Shift)の改善
CLSは、ページの読み込み中にレイアウトが意図せずずれる量で、目標値は0.1以下です。
<!-- 画像のサイズを明示する -->
<img src="/photo.jpg" alt="写真" width="800" height="600" />
<!-- アスペクト比を維持するCSS -->
<style>
.image-container {
aspect-ratio: 16 / 9;
width: 100%;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 広告やiframeの領域を事前に確保 */
.ad-slot {
min-height: 250px;
}
/* Webフォントの表示制御 */
@font-face {
font-family: 'NotoSansJP';
src: url('/fonts/NotoSansJP-Regular.woff2') format('woff2');
font-display: swap; /* FOUTを許容してCLSを防ぐ */
}
</style>
9. 画像の最適化
画像はページの容量の大部分を占めるため、最適化の効果が大きい項目です。
<!-- レスポンシブ画像とWebP/AVIF対応 -->
<picture>
<source srcset="/image.avif" type="image/avif" />
<source srcset="/image.webp" type="image/webp" />
<img src="/image.jpg" alt="説明テキスト"
width="800" height="600"
loading="lazy"
decoding="async" />
</picture>
<!-- Next.js Imageコンポーネントの活用 -->
import Image from 'next/image';
<Image
src="/hero.jpg"
alt="ヒーローイメージ"
width={1200}
height={630}
priority // LCP要素の場合
sizes="(max-width: 768px) 100vw, 1200px"
/>
10. JavaScriptの最適化
JavaScriptの読み込みと実行は、ページのパフォーマンスに大きく影響します。
・不要なJavaScriptを削除し、バンドルサイズを削減する
・コード分割(Code Splitting)で初期ロードを軽量化する
・サードパーティスクリプトの遅延読み込みを実装する
・Tree Shakingで使用していないコードをバンドルから除外する
// サードパーティスクリプトの遅延読み込み
// Next.js Scriptコンポーネント
import Script from 'next/script';
<Script
src="https://www.googletagmanager.com/gtag/js?id=G-XXXXX"
strategy="afterInteractive"
/>
// ユーザー操作後にチャットウィジェットを読み込む
<Script
src="https://chat-widget.example.com/widget.js"
strategy="lazyOnload"
/>
メタデータとOGP(項目11〜14)
検索結果での表示やSNSでのシェア時の見え方を制御するメタデータの設定です。
11. titleタグとmeta descriptionの最適化
titleタグは検索結果のクリック率に直結する最重要メタデータです。
<!-- titleタグのベストプラクティス -->
<title>テクニカルSEOチェックリスト|エンジニアが押さえるべき20項目 | サイト名</title>
<!-- meta description -->
<meta name="description"
content="テクニカルSEOの重要チェックポイント20項目をエンジニア向けに解説。クローラビリティ、Core Web Vitals、構造化データの実装方法を、コード付きで紹介します。" />
titleタグは30〜60文字、meta descriptionは80〜120文字を目安にします。各ページでユニークなtitle・descriptionを設定しましょう。
12. OGPタグの設定
OGP(Open Graph Protocol)は、SNSでシェアされた際の表示を制御します。
<meta property="og:title" content="テクニカルSEOチェックリスト" />
<meta property="og:description" content="エンジニアが押さえるべき20項目を解説" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://example.com/blog/seo-technical-checklist" />
<meta property="og:image" content="https://example.com/ogp/seo-checklist.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="サイト名" />
<meta property="og:locale" content="ja_JP" />
<!-- Twitterカード -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@your_account" />
13. hreflangタグ(多言語サイトの場合)
多言語サイトでは、各ページの言語・地域バリエーションを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/en/page" />
14. noindex・nofollowの適切な使用
インデックスさせたくないページには、metaタグでnoindexを指定します。
<!-- 検索結果に表示させたくないページ -->
<meta name="robots" content="noindex, follow" />
<!-- 使い分け -->
<!-- noindex, follow:インデックスしないがリンクは辿る -->
<!-- noindex, nofollow:インデックスもリンク巡回もしない -->
<!-- index, nofollow:インデックスするがリンクは辿らない -->
サンクスページ、検索結果ページ、フィルタ付き一覧ページなどがnoindex対象の典型例です。
構造化データの実装(項目15〜17)
構造化データ(Schema.org)は、検索エンジンにコンテンツの意味を明示的に伝えるマークアップです。リッチリザルトの表示につながり、クリック率の向上が期待できます。
15. 記事の構造化データ
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "テクニカルSEOチェックリスト",
"description": "エンジニアが押さえるべき20項目を解説",
"image": "https://example.com/images/seo-checklist.jpg",
"author": {
"@type": "Person",
"name": "著者名",
"url": "https://example.com/author/name"
},
"publisher": {
"@type": "Organization",
"name": "会社名",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2026-03-27",
"dateModified": "2026-03-27"
}
</script>
16. FAQ構造化データ
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "テクニカルSEOとは何ですか?",
"acceptedAnswer": {
"@type": "Answer",
"text": "テクニカルSEOは、検索エンジンのクローラーがサイトを効率的にクロール・インデックスするための技術的な最適化施策です。"
}
}
]
}
</script>
17. パンくずリストの構造化データ
<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/blog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "テクニカルSEOチェックリスト"
}
]
}
</script>
構造化データの実装後は、Googleのリッチリザルトテストツールで正しく認識されるか確認しましょう。
インフラとセキュリティ(項目18〜20)
サイトのインフラとセキュリティも、テクニカルSEOの重要な構成要素です。
18. HTTPS化の徹底
HTTPSはGoogleの明確なランキングシグナルです。すべてのページがHTTPSで配信されていることを確認し、HTTPからHTTPSへの301リダイレクトを設定しましょう。混在コンテンツ(HTTPSページ内のHTTPリソース読み込み)もゼロにする必要があります。
19. モバイルフレンドリー対応
Googleはモバイルファーストインデックスを採用しており、モバイル版のコンテンツがインデックスの基準になります。
<!-- ビューポートの設定 -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- レスポンシブデザインのCSS -->
<style>
/* タッチターゲットのサイズを確保 */
button, a {
min-height: 48px;
min-width: 48px;
}
/* テキストサイズの可読性 */
body {
font-size: 16px; /* モバイルでの最小推奨サイズ */
line-height: 1.8;
}
</style>
タップターゲットの間隔が狭すぎないか、テキストが小さすぎないか、横スクロールが発生しないかを確認しましょう。
20. ページの応答速度(TTFB)
サーバーの応答時間(TTFB)は200ms以内が目標です。CDNの活用、サーバーサイドキャッシュの最適化、データベースクエリの効率化などで改善します。
・CDNを導入し、ユーザーに近いエッジサーバーからコンテンツを配信する
・HTTPレスポンスヘッダーのキャッシュ制御を適切に設定する
・Gzip/Brotli圧縮を有効にしてファイル転送量を削減する
・HTTP/2またはHTTP/3を有効にして並列リクエストの効率を向上させる
テクニカルSEO監視の自動化
テクニカルSEOは一度設定して終わりではなく、継続的な監視が必要です。
Google Search Console
インデックス状況、クロールエラー、Core Web Vitals、モバイルユーザビリティの問題を確認できます。週次で確認する習慣をつけましょう。
Lighthouse CI
CI/CDパイプラインにLighthouseを組み込み、デプロイ前にパフォーマンスやSEOスコアをチェックします。
// lighthouserc.js
module.exports = {
ci: {
collect: {
url: ['http://localhost:3000/', 'http://localhost:3000/blog'],
numberOfRuns: 3,
},
assert: {
assertions: {
'categories:performance': ['error', { minScore: 0.9 }],
'categories:seo': ['error', { minScore: 0.9 }],
'categories:accessibility': ['warn', { minScore: 0.9 }],
},
},
},
};
定期的なサイト監査
Screaming FrogやAhrefsなどのツールでサイト全体をクロールし、壊れたリンク、リダイレクトチェーン、重複コンテンツなどの問題を定期的に検出・修正しましょう。
まとめ
テクニカルSEOの20項目を整理すると、大きく5つのカテゴリに分類できます。
クローラビリティ:robots.txt、サイトマップ、内部リンク、canonical、クロールバジェット
Core Web Vitals:LCP、INP、CLS、画像最適化、JavaScript最適化
メタデータ:title/description、OGP、hreflang、noindex/nofollow
構造化データ:Article、FAQ、パンくずリスト
インフラ:HTTPS、モバイルフレンドリー、TTFB
すべてを一度に対応する必要はありません。まずはGoogle Search ConsoleとLighthouseで現状を把握し、スコアの低い項目から優先的に対応しましょう。特にCore Web Vitalsとクローラビリティは、検索順位への影響が大きい領域です。
テクニカルSEOの改善は、開発プロセスに組み込むことで継続的に維持できます。コードレビューにSEOチェックを含め、CI/CDにLighthouseを組み込み、チーム全体でSEO品質を守る体制を構築しましょう。
Harmonic Society
この記事の内容、自社の業務でも活かせそうですか?
ローカルLLM・AI・クラウドなどの技術導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK。まずは30分の無料相談から。売り込みはしません。
関連記事
Related / 9 articles
Notes & Insights
- プログラミング
DDoS攻撃の仕組みと対策入門|レイヤー別の防御とCDN・クラウドの活用
DDoS攻撃をボリューム型・プロトコル型・アプリ層に分けて仕組みを解説し、自前サーバーで防げない理由、CloudflareやAWS Shieldの標準防御、オリジンIPの隠し方、レートリミットとBot対策、攻撃を受けたときの初動、費用が跳ね上がるDenial of Walletへの備えまでわかります。
- プログラミング
WAFとは?仕組み・導入パターン・誤検知対策|Webアプリを攻撃から守る実践ガイド
WAFがファイアウォールやIDSと何が違うのか、シグネチャとマネージドルールの仕組み、Cloudflare WAF・AWS WAF・ModSecurityの比較、フォーム送信がブロックされる誤検知の調査と例外設定、ログ監視、WAFが代替できないことまで実践的に解説します。
- プログラミング
セキュリティヘッダー入門|CSP・HSTS・X-Frame-Optionsの設定と効果を実践解説
CSP・HSTS・X-Frame-Options・X-Content-Type-Optionsなど主要セキュリティヘッダーが防ぐ攻撃と、CSPのReport-Onlyからの段階導入、nonce/hash、HSTS preloadの不可逆リスク、Nginx・Next.js・Astroでの設定例、確認方法を解説します。
- プログラミング
クラウドの通信費(Egress)入門|データ転送量課金の仕組みと転送コストを抑える設計
クラウドの「受信無料・送信有料」の原則、AZ間・リージョン間・インターネット向けの単価差、NATゲートウェイ処理料の罠、CDNで転送量を減らす方法、バックアップやログ転送の見落とし、請求書で転送料を特定する手順を解説。想定外の請求を防げます。
- プログラミング
秘密情報をGitに入れない仕組み|.gitignore・git-secrets・履歴から漏れた鍵の削除
APIキーや.envをGitにコミットしてしまう典型経路と、.gitignore・.env.exampleの運用、pre-commitでのgitleaks検知、GitHub secret scanningの活用、漏れた鍵の無効化と履歴書き換え(git filter-repo)の手順を解説。仕組みで再発を防げます。
- プログラミング
開発・ステージング・本番環境の分離設計|環境差分をなくす構成とアクセス制御
開発・ステージング・本番それぞれの目的と、構成をコードで揃える方法、環境別の設定注入、本番データを使わないテストデータ戦略、ステージングの保護(Basic認証・IP制限・noindex)、コストを抑える運用までを解説。環境差分による本番障害を防げます。
- プログラミング
ngrok・Cloudflare Tunnelでローカルを公開|Webhook開発とデモ環境の作り方
NAT内のローカル環境にStripeやLINEのWebhookを届けるトンネリングの仕組みを解説。ngrok・Cloudflare Tunnel・localtunnelの比較、固定ドメインと認証、リクエスト検査、公開時のセキュリティ、自宅サーバー公開への応用までわかります。
- プログラミング
ローカル開発環境のHTTPS化|mkcert・hostsファイル・自己署名証明書の正しい使い方
ローカル開発をHTTPS前提にすべき理由(Secure Cookie・Service Worker・OAuth)と、mkcertでローカルCAを作りhostsで独自ドメインを割り当ててVite・Next.js・Dockerで使う手順を解説。証明書警告を無視する癖の危険も理解できます。
- プログラミング
localhost・0.0.0.0・127.0.0.1の違い|ポートとUnixソケットを理解して「つながらない」を解決
localhost・127.0.0.1・0.0.0.0の意味の違い、Dockerで外から接続できない原因、host.docker.internal、ポート競合の調べ方、Unixソケットの利点と権限、1024未満ポートの制約を解説。「つながらない」を仕組みから解決できます。
Harmonic Society
「読んで終わり」にせず、自社の業務で試してみませんか?
AI・ローカルLLM・クラウドの導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK・売り込みなし。
無料・30分・オンラインOK|1営業日以内に返信します