SEO対策済みHTMLテンプレート — 完全版
まずは、SEOの基本設定をすべて網羅した完全版テンプレートを提示します。このコードをコピペし、自サイトの情報に書き換えるだけで、head内のメタ情報・OGP・構造化データ・bodyのセマンティック構造という土台が一度に整います。各要素の意味と最適な設定は次章以降で解説するので、まずは全体像をつかんでください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ページタイトル|サイト名(30〜35文字以内推奨)</title>
<meta name="description" content="ページの概要を120〜160文字で記述します。検索結果に表示されるスニペットとして機能するため、クリックしたくなる内容にしましょう。">
<link rel="canonical" href="https://example.com/current-page/">
<!-- OGP -->
<meta property="og:title" content="ページタイトル|サイト名">
<meta property="og:description" content="SNSでシェアされたときに表示される説明文。">
<meta property="og:type" content="article">
<meta property="og:url" content="https://example.com/current-page/">
<meta property="og:image" content="https://example.com/images/ogp.jpg">
<meta property="og:site_name" content="サイト名">
<meta property="og:locale" content="ja_JP">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@your_account">
<!-- favicon -->
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<!-- 構造化データ(JSON-LD) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "ページタイトル",
"description": "ページの概要",
"image": "https://example.com/images/ogp.jpg",
"author": {
"@type": "Person",
"name": "著者名"
},
"publisher": {
"@type": "Organization",
"name": "サイト名",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2026-03-15",
"dateModified": "2026-03-15"
}
</script>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
<nav aria-label="メインナビゲーション">
<a href="/">サイト名</a>
<ul>
<li><a href="/about/">会社概要</a></li>
<li><a href="/service/">サービス</a></li>
<li><a href="/blog/">ブログ</a></li>
<li><a href="/contact/">お問い合わせ</a></li>
</ul>
</nav>
</header>
<main>
<article>
<h1>ページのメインタイトル</h1>
<p>本文をここに記述します。</p>
<section>
<h2>セクション見出し</h2>
<p>セクションの内容</p>
<section>
<h3>サブセクション見出し</h3>
<p>サブセクションの内容</p>
</section>
</section>
</article>
<aside>
<h2>関連記事</h2>
<ul>
<li><a href="/related-post/">関連記事タイトル</a></li>
</ul>
</aside>
</main>
<footer>
<p>© 2026 サイト名</p>
<nav aria-label="フッターナビゲーション">
<ul>
<li><a href="/privacy/">プライバシーポリシー</a></li>
<li><a href="/sitemap/">サイトマップ</a></li>
</ul>
</nav>
</footer>
</body>
</html>
このテンプレートには、head内のメタ情報、OGP、構造化データ(JSON-LD)、bodyのセマンティックHTML構造がひととおり含まれています。当サイトも、WordPress移行後は全ページをこの並びに沿ったテンプレートで構築しています。マークアップ品質と表示速度の実測値はSEOに強いコーディングの実測レポートで公開しているので、導入後の目標水準の参考にしてください。
HTML最適化の考え方 — 3つのレイヤーで捉える
テンプレートを丸暗記する必要はありません。HTMLのSEO対策は、役割の異なる3つのレイヤーの重ね合わせだと理解しておくと、どこを何のためにいじっているのかが明快になり、カスタマイズの判断に迷わなくなります。
| レイヤー | 担当する要素 | 役割(何を伝えるか) | 主に効く場面 |
|---|---|---|---|
| 1. head内のメタ情報 | charset / viewport / title / meta description / canonical / OGP | 検索エンジンへの「自己紹介」。ページの言語・主題・正規URLを宣言する | 検索順位・CTR・重複対策・SNS表示 |
| 2. bodyのセマンティック構造 | header / nav / main / article / section / aside / footer / h1〜h6 | コンテンツの「意味の地図」。どこが本文でどこが補足かを機械に伝える | メインコンテンツの認識・アクセシビリティ |
| 3. 構造化データ(JSON-LD) | Article / Product / Organization などのschema | ページ種別と属性の「明示的な意味づけ」。リッチリザルトの土台 | リッチリザルト・AI検索での理解 |
完全版テンプレートは、この3レイヤーを1枚に収めたものです。タグ1つずつの書き方や「よくある間違い」を優先度別に確認したい場合はSEO対策に必須のHTMLタグ一覧が辞書代わりになります。本記事では、この3レイヤーがテンプレートのどこに対応するかを押さえながら、カスタマイズと導入の手順に進みます。
headタグ内の設定 — 検索エンジンへの自己紹介
headタグの中に書く情報は、ブラウザ画面には直接表示されません。しかし検索エンジンのクローラーはまずこの領域を読み取り、ページの言語・主題・正規URLを判断します。ここに不備があると、どれほど良いコンテンツを書いても正しく評価されないおそれがあります。各タグの詳細な書き方は前掲のタグ一覧に譲り、ここではテンプレートを設計するうえで押さえるべき「順番」と「勘所」を解説します。
先頭に置くべきはcharsetとviewport
headの冒頭に配置すべきは、文字エンコーディング(charset)とviewportの2つです。ブラウザはHTMLの先頭1024バイト以内で文字エンコーディングを判定するため、<meta charset="UTF-8">を他のタグより前に置かないと文字化けのリスクが生じます。UTF-8は日本語を含むほぼすべての言語を扱える世界標準で、2026年現在はこれ一択と考えて問題ありません。
viewportは<meta name="viewport" content="width=device-width, initial-scale=1.0">と記述し、モバイル端末で画面幅に合わせてレイアウトを調整させます。Googleはモバイルファーストインデックス(MFI)を2019年から段階的に導入し、2023年に全サイトへの適用を完了しています。viewportがないページはモバイルでPC向けレイアウトが縮小表示され、ユーザー体験の悪化がCore Web Vitalsの評価にも波及します。
title・meta description・canonicalの基準値
titleタグは検索結果のクリック率(CTR)に最も直接的に影響する要素です。全角約35文字を超えると検索結果で「…」に省略されるため、30〜35文字に収め、対策キーワードを先頭付近に配置します。meta descriptionは検索結果のスニペット候補で、当サイトでは120〜160文字を基準にし、最も伝えたい情報は先頭80文字以内に置くようにしています。canonicalタグは同一・類似コンテンツの正規URLを宣言するもので、必ず絶対URLで、自ページを指す自己参照canonicalを記述するのがベストプラクティスです。ケース別の判断はcanonicalタグの設定方法と重複コンテンツ対策の詳細ガイドにまとめています。
OGPは間接的なSEO効果を担う
OGP(Open Graph Protocol)は、SNSでシェアされた際のタイトル・画像・説明文を制御する仕組みです。Open Graph Protocolの公式仕様に沿って、最低限og:title・og:description・og:image・og:url・og:typeを設定します。OGP自体はランキング要因ではありませんが、シェアされやすさが高まればサイテーションや被リンクの機会が広がり、間接的なSEO効果を発揮します。og:imageは1200×630px(アスペクト比1.91:1)が汎用的な推奨サイズです。画像設計や各SNSでの表示確認手順はOGPの設定方法・画像サイズ・確認ツールの解説記事を参照してください。
重要タグはHTML上部に置く — Googlebotの2MB上限
テンプレートがhead先頭に重要タグを集めているのには理由があります。Googleは2026年3月、Googlebotが取得するHTMLの上限がHTTPヘッダー込みで2MBであり、それを超えた部分はインデックス処理に渡されないと公式に解説しました。だからこそ、title・meta・canonical・構造化データはHTMLの早い位置に置き、重いCSSやJavaScriptは外部ファイルに切り出してHTML本体を軽く保つ設計が推奨されます。発表の詳細はGooglebotの「2MBの壁」を解説したニュース記事で整理しています。
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ページタイトル</title>
<meta name="description" content="...">
<link rel="canonical" href="https://example.com/page/">
<!-- 構造化データ・OGPなどの重要タグもHTML上部に置く -->
<!-- 重いCSS/JSは外部ファイル化してHTML本体を軽く保つ -->
<link rel="stylesheet" href="/css/style.css">
<script src="/js/app.js" defer></script>
</head>
同じ発表では、サーバーの応答時間に目を配ることも挙げられています。応答速度の指標であるTTFBは0.8秒以内が目安とされ、当サイトの実測(2026年7月計測)ではTTFB平均0.19秒でした(curlによる3回計測)。HTMLを軽く保つことと応答の速いサーバーを使うことは、クロールとユーザー体験の両方に効きます。
bodyタグ内のセマンティック構造 — コンテンツの意味の地図
headが「自己紹介」なら、bodyのセマンティック構造は「コンテンツの意味的な地図」です。HTML5のセマンティック要素(header・nav・main・article・section・aside・footer)を正しく使うことで、検索エンジンにページ各部の役割を正確に伝えられます。実装の細部はSEOに強いコーディングで扱っていますが、テンプレートを崩さず運用するために、各要素の役割と見出しの階層ルールを押さえておきましょう。
header/nav/main/article/aside/footerの役割
各要素は明確な役割を持ち、正しい階層で配置する必要があります。Googleのクローラーは、これらのタグを手がかりに「どこがメインコンテンツで、どこがナビゲーションや補足か」を判断しているからです。
<header>はページやセクションの導入部で、サイトロゴやグローバルナビゲーションを含みます。<nav>は主要なナビゲーションリンクの集まりに使い、複数ある場合はaria-labelで「メインナビゲーション」「パンくずリスト」のように識別できるようにします。<main>はページ固有のメインコンテンツを囲む要素で、1ページに1つだけ配置し、ヘッダーやフッターなど繰り返し要素はその外に置きます。Googleはメインコンテンツ(MC)の識別にmainを参考にすると考えられており、SEO上もっとも重要なセマンティック要素です。<article>はそれ単体で独立するコンテンツ、<aside>は関連記事や補足情報、<footer>は著作権表示や規約リンクに使います。すべてをdivで組むとページ構造の判断が推測に頼らざるを得なくなるため、役割のある部分はセマンティック要素で明示します。
見出しタグ(h1〜h6)の階層ルール
見出しタグはページの論理構造をツリー状に表す要素です。書籍でいえばh1が本のタイトル、h2が章、h3が節、h4が項にあたります。ルールは明快で、h1はページに1つだけ置き、h2→h3→h4と番号順に階層を深くします。最も守るべきなのは「レベルを飛ばさない」ことです。h2の直下にh4を置くと、検索エンジンは構造が破綻していると判断する可能性があり、見出しレベルを頼りに移動するスクリーンリーダー利用者にとってもアクセシビリティ上の問題になります。装飾目的で見出しタグを使うのは避け、見た目の調整はCSSで行います。GoogleのSEOスターターガイドでも、見出しタグの適切な使用が推奨されています。階層の飛びや重複は、Chrome拡張機能「HeadingsMap」でツリー表示すればひと目で確認できます。
用途別HTMLテンプレート
完全版を理解したら、実務でよく使う3つの用途に特化したテンプレートを使い分けます。いずれも完全版をベースに、用途に応じて構造化データとセマンティック構造を最適化しています。
ブログ記事ページ用テンプレート
ブログ記事ページでは、著者・公開日・カテゴリといったメタ情報を、構造化データとセマンティックHTMLの両方で明示することが重要です。検索結果に著者名や公開日が表示されるリッチリザルトが出やすくなり、CTR向上につながります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>記事タイトル|ブログ名(30〜35文字以内)</title>
<meta name="description" content="記事の概要を120〜160文字で記述。">
<link rel="canonical" href="https://example.com/post-slug/">
<meta property="og:title" content="記事タイトル">
<meta property="og:description" content="記事の概要">
<meta property="og:type" content="article">
<meta property="og:url" content="https://example.com/post-slug/">
<meta property="og:image" content="https://example.com/images/post-slug.jpg">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "記事タイトル",
"description": "記事の概要",
"image": "https://example.com/images/post-slug.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-15",
"dateModified": "2026-03-15",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/post-slug/"
}
}
</script>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
<nav aria-label="メインナビゲーション">
<a href="/">サイト名</a>
<ul>
<li><a href="/blog/">ブログ</a></li>
<li><a href="/about/">運営者情報</a></li>
<li><a href="/contact/">お問い合わせ</a></li>
</ul>
</nav>
</header>
<nav aria-label="パンくずリスト">
<ol>
<li><a href="/">ホーム</a></li>
<li><a href="/category/example/">カテゴリ名</a></li>
<li>記事タイトル</li>
</ol>
</nav>
<main>
<article>
<header>
<h1>記事タイトル</h1>
<p>
<time datetime="2026-03-15">2026年3月15日</time>公開
/著者:<a href="/author/name/">著者名</a>
</p>
</header>
<section>
<h2>セクション見出し</h2>
<p>記事本文をここに記述します。</p>
<figure>
<img src="/images/example.jpg"
alt="画像の説明をalt属性に記述"
width="800" height="450"
loading="lazy">
<figcaption>画像のキャプション</figcaption>
</figure>
</section>
<section>
<h2>まとめ</h2>
<p>記事のまとめ文をここに記述します。</p>
</section>
</article>
<aside>
<h2>関連記事</h2>
<ul>
<li><a href="/related-post/">関連記事タイトル</a></li>
</ul>
</aside>
</main>
<footer>
<p>© 2026 サイト名</p>
</footer>
</body>
</html>
このテンプレートのポイントは3つあります。第一に、構造化データをArticleより具体的な「BlogPosting」にして、コンテンツの性質を正確に伝えています。第二に、パンくずリストをnavとol(順序付きリスト)で実装し、サイト構造の理解を助けています。パンくずの構造化データまで含めた設計はパンくずリストの正しい設置方法と構造化データマークアップで解説しています。第三に、画像にwidth・height属性とloading="lazy"を指定し、CLS(レイアウトシフト)の防止と遅延読み込みを両立させています。これはCore Web Vitalsのスコアに直結します。
商品・サービスページ用テンプレート
商品・サービスページでは、価格・在庫・レビュー評価などをProduct構造化データで明示するのが最大のポイントです。検索結果に星評価や価格のリッチリザルトが出現し、CTRの向上が期待できます。各タイプの詳細な実装は構造化データマークアップ完全ガイドを参照してください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>商品名 - 価格・特徴・レビュー|サイト名</title>
<meta name="description" content="商品名の特徴・価格・ユーザーレビューを紹介。○○の悩みを解決する商品です。">
<link rel="canonical" href="https://example.com/products/product-slug/">
<meta property="og:title" content="商品名 - 価格・特徴・レビュー">
<meta property="og:description" content="商品名の特徴・価格・ユーザーレビューを紹介。">
<meta property="og:type" content="product">
<meta property="og:url" content="https://example.com/products/product-slug/">
<meta property="og:image" content="https://example.com/images/products/product-slug.jpg">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "商品名",
"image": "https://example.com/images/products/product-slug.jpg",
"description": "商品の詳細な説明文",
"brand": {
"@type": "Brand",
"name": "ブランド名"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/product-slug/",
"priceCurrency": "JPY",
"price": "9800",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-12-31"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "128"
}
}
</script>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
<nav aria-label="メインナビゲーション">
<a href="/">サイト名</a>
<ul>
<li><a href="/products/">商品一覧</a></li>
<li><a href="/about/">会社概要</a></li>
<li><a href="/contact/">お問い合わせ</a></li>
</ul>
</nav>
</header>
<nav aria-label="パンくずリスト">
<ol>
<li><a href="/">ホーム</a></li>
<li><a href="/products/">商品一覧</a></li>
<li>商品名</li>
</ol>
</nav>
<main>
<article>
<h1>商品名</h1>
<section>
<h2>商品の特徴</h2>
<figure>
<img src="/images/products/product-slug.jpg"
alt="商品名の外観写真"
width="800" height="600"
loading="eager">
<figcaption>商品名の全体像</figcaption>
</figure>
<p>商品の特徴や魅力を記述します。</p>
</section>
<section>
<h2>価格・プラン</h2>
<p>価格:<strong>9,800円</strong>(税込)</p>
</section>
<section>
<h2>お客様の声</h2>
<blockquote>
<p>「使い始めて1ヶ月で効果を実感しました。」</p>
<cite>— 利用者A様</cite>
</blockquote>
</section>
<section>
<h2>よくある質問</h2>
<dl>
<dt>Q. 返品は可能ですか?</dt>
<dd>A. 商品到着後14日以内であれば返品を承ります。</dd>
</dl>
</section>
</article>
</main>
<footer>
<p>© 2026 サイト名</p>
</footer>
</body>
</html>
商品ページでは、ファーストビューに入るメインビジュアルの画像にloading="eager"を指定しています。この位置の画像を遅延読み込みにするとLCP(Largest Contentful Paint)が悪化するためです。FAQ部分はdl(定義リスト)で質問と回答の関係を明確にしており、Schema.orgのFAQPage構造化データを追加すればFAQリッチリザルトが表示される可能性もあります。
コーポレートトップページ用テンプレート
コーポレートサイトのトップページは、ブランドイメージを伝えると同時に「何の会社か」を検索エンジンへ正しく伝える必要があります。Organization構造化データとWebSite構造化データの両方を配列で設定するのが特徴です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会社名 | 事業内容を端的に表すフレーズ</title>
<meta name="description" content="会社名は○○を提供する企業です。△△の課題を解決し、□□の実現を支援します。">
<link rel="canonical" href="https://example.com/">
<meta property="og:title" content="会社名 | 事業内容を端的に表すフレーズ">
<meta property="og:description" content="会社名の公式サイト。○○事業を展開。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/">
<meta property="og:image" content="https://example.com/images/ogp-top.jpg">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "会社名",
"url": "https://example.com/",
"logo": "https://example.com/logo.png",
"description": "会社の概要説明",
"address": {
"@type": "PostalAddress",
"streetAddress": "○○区△△ 1-2-3",
"addressLocality": "東京都",
"postalCode": "100-0001",
"addressCountry": "JP"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+81-3-1234-5678",
"contactType": "customer service",
"availableLanguage": "Japanese"
},
"sameAs": [
"https://twitter.com/example",
"https://www.facebook.com/example"
]
},
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "会社名",
"url": "https://example.com/",
"potentialAction": {
"@type": "SearchAction",
"target": "https://example.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
]
</script>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
<nav aria-label="メインナビゲーション">
<a href="/">
<img src="/logo.svg" alt="会社名" width="200" height="40">
</a>
<ul>
<li><a href="/about/">会社概要</a></li>
<li><a href="/service/">事業内容</a></li>
<li><a href="/news/">お知らせ</a></li>
<li><a href="/recruit/">採用情報</a></li>
<li><a href="/contact/">お問い合わせ</a></li>
</ul>
</nav>
</header>
<main>
<section aria-label="メインビジュアル">
<h1>キャッチコピー:企業のビジョンを端的に</h1>
<p>サブコピー:事業内容を補足する説明文</p>
<a href="/contact/">お問い合わせはこちら</a>
</section>
<section>
<h2>事業内容</h2>
<div>
<section>
<h3>事業1のタイトル</h3>
<p>事業1の説明文</p>
<a href="/service/service1/">詳しく見る</a>
</section>
<section>
<h3>事業2のタイトル</h3>
<p>事業2の説明文</p>
<a href="/service/service2/">詳しく見る</a>
</section>
</div>
</section>
<section>
<h2>お知らせ</h2>
<ul>
<li>
<time datetime="2026-03-15">2026.03.15</time>
<a href="/news/20260315/">お知らせタイトル</a>
</li>
</ul>
</section>
<section>
<h2>企業情報</h2>
<table>
<tr><th>会社名</th><td>株式会社○○</td></tr>
<tr><th>所在地</th><td>東京都○○区△△ 1-2-3</td></tr>
<tr><th>設立</th><td>2020年1月</td></tr>
<tr><th>代表者</th><td>代表 太郎</td></tr>
<tr><th>事業内容</th><td>Webマーケティング支援</td></tr>
</table>
</section>
</main>
<footer>
<nav aria-label="フッターナビゲーション">
<ul>
<li><a href="/privacy/">プライバシーポリシー</a></li>
<li><a href="/sitemap/">サイトマップ</a></li>
</ul>
</nav>
<p>© 2026 会社名</p>
</footer>
</body>
</html>
コーポレートサイトのテンプレートでは、OrganizationとWebSiteの2種類を配列で設定しています。OrganizationのsameAsプロパティでSNSアカウントを紐づけると、ナレッジパネル(検索結果右側の企業情報カード)に反映される可能性が高まります。WebSiteにSearchActionを設定すれば、検索結果にサイト内検索ボックスが表示されることもあります。
テンプレート導入の実践手順
テンプレートは、コピペしただけでは効果を発揮しません。プレースホルダーを自サイトの情報に正確に書き換え、検証まで済ませて初めて土台が完成します。ここでは導入を6ステップの手順に落とし込みます。
ステップ1〜2:完全版をコピーしてhead内を書き換える
まず完全版テンプレートをコピーし、head内のプレースホルダーを1つずつ自サイトの値に置換します。特に見落としやすい項目を一覧にまとめました。
| 項目 | 変更箇所 | 推奨設定 | 未設定時のリスク |
|---|---|---|---|
| lang属性 | <html lang=”ja”> | コンテンツの言語に合わせて変更(英語ならen) | 検索エンジンが言語を誤認識し、意図しない国の検索結果に表示される |
| titleタグ | <title>の内容 | 対策KWを先頭に配置、30〜35文字以内 | 自動生成タイトルになりCTRが低下する |
| meta description | content属性の値 | 120〜160文字、ベネフィットを明記 | 本文から自動抽出された断片的テキストがスニペットになる |
| canonicalタグ | href属性の値 | 自ページの正規URLを絶対パスで記述 | 重複コンテンツの評価分散、意図しないURLがインデックスされる |
| og:image | content属性の値 | 1200×630pxの画像URLを指定 | SNSシェア時にサイドバーの画像や広告が表示される |
| 構造化データ | JSON-LD内の各値 | ページ種別に合ったタイプを選択(Article/Product/Organization等) | リッチリザルトが表示されず、検索結果での差別化ができない |
| favicon | linkタグのhref | ICO・SVG・Apple Touch Iconの3種を設定 | ブラウザタブやブックマークでサイトが識別しにくい |
ステップ3:bodyの構造を自サイトに合わせる
次に、bodyのセマンティック構造とコンテンツを自サイトに合わせて調整します。ここでのカスタマイズ項目と、避けたい典型的な間違いを整理します。
| 項目 | 対象要素 | 正しい使い方 | よくある間違い |
|---|---|---|---|
| h1タグ | <h1> | ページに1つだけ、メインタイトルとして使用 | ロゴにh1を使う、複数のh1を配置する |
| 見出し階層 | <h2>〜<h6> | 番号順に階層を深くする(h2→h3→h4) | h2の直下にh4を置く(h3を飛ばす) |
| 画像のalt属性 | <img alt> | 画像の内容を具体的に記述 | alt未設定、キーワードの詰め込み、「画像」とだけ記述 |
| 画像サイズ属性 | width / height | 実際の表示サイズを指定してCLSを防止 | width/height未指定で読み込み時にレイアウトがガタつく |
| 内部リンク | <a href> | 関連性の高いページに自然なアンカーテキストでリンク | 「こちら」「詳しくはここ」のような無意味なアンカーテキスト |
| 遅延読み込み | loading属性 | ファーストビュー外の画像にloading=”lazy”を指定 | ファーストビューの画像にlazyを指定してLCPを悪化させる |
| nav要素のラベル | aria-label | 複数のnavがある場合は各navに識別名を付与 | aria-label未設定で、スクリーンリーダーがnavを区別できない |
ステップ4:構造化データをページ種別に合わせる
3つ目のレイヤーである構造化データは、ページの性質に合わせてタイプを差し替えます。記事ならBlogPosting、商品ならProduct、企業トップならOrganization+WebSiteといった具合です。値はプレースホルダーのままにせず、実在する情報だけを記述します。存在しないレビュー件数や価格をProductに書くと、Googleのスパムポリシー違反やリッチリザルトの無効化につながるため注意してください。
ステップ5:公開前に検証ツールでチェックする
書き換えが済んだら、公開前に機械的な検証を行います。マークアップの妥当性はW3C Nu HTML Checker、構造化データはGoogleのリッチリザルトテスト、見出し階層はChrome拡張の「HeadingsMap」で確認できます。参考として、当サイトの実測(2026年7月計測)では、Nu HTML Checkerで検出されたエラー10件はすべてWordPressテーマ由来で、記事コンテンツ由来のエラーは0件でした。検証手順と結果の詳細はSEOに強いコーディングの実測レポートで公開しています。
ステップ6:URLを変える場合は301リダイレクトを併用する
既存サイトをこのテンプレートへ載せ替える際にURL構造も変える場合は、canonicalの統一と301リダイレクトをセットで行います。当サイトも2026年7月にNext.js(SSG)からWordPressへ移行し、記事URLを/blog/記事名/から/記事名/へ変更しましたが、全記事に301リダイレクトを設定してcanonicalを新URLに統一したため、インデックスの問題は発生していません。URLの移行はcanonicalタグと重複コンテンツ対策の解説と合わせて進めると安全です。テンプレート導入をWeb制作全体の工程に位置づけたい方はWeb制作にSEOを組み込む方法も参考になります。
2026年のHTML最適化 — AI検索時代の位置づけ
「AI OverviewsやAI Modeに引用されるには、特別なタグやファイルが必要では」という疑問には、Google自身が答えを出しています。Googleは2026年5月に生成AI検索向けの最適化ガイドを公開し、生成AI機能は既存の検索ランキング・品質システムに基づくため追加要件はなく、llms.txtの設置やコンテンツのチャンク化といった「AI向けの特別対応」は不要だと明言しました。詳細はGoogleの生成AI検索最適化ガイド公開を報じた解説記事で整理しています。
つまり、本記事のテンプレートで整える基本のマークアップ——正しいtitle・見出し・セマンティックHTML・構造化データ——こそが、従来の検索でもAI検索でも評価される共通の土台になります。テンプレートで土台を固めたら、次はその露出を計測する番です。Googleは2026年6月、Search Consoleに生成AIパフォーマンスレポートを追加し、AI OverviewsやAI Modeで自サイトのURLが表示された回数をURL別・国別・デバイス別に確認できるようにしました(段階提供)。機能の詳細はSearch Consoleの生成AIパフォーマンスレポート解説記事にまとめています。テンプレートで基盤を整え、通常の検索とAI検索の両方で露出を観測して改善する——このサイクルが2026年の標準になっていきます。
まとめ
HTMLのSEO対策は、一度テンプレートを正しく作ってしまえば、以降のページ制作で毎回ゼロから考える必要がなくなります。本記事の要点を振り返ります。
HTML最適化は、head内のメタ情報(自己紹介)、bodyのセマンティック構造(意味の地図)、構造化データ(明示的な意味づけ)という3つのレイヤーの重ね合わせです。完全版テンプレートはこの3層を1枚に収めたもので、当サイトも同じ並びで全ページを構築しています。titleは30〜35文字でキーワードを先頭付近に、meta descriptionは120〜160文字で、canonicalは絶対URLの自己参照で——といった基準値を守り、重要タグはGooglebotの2MB上限に埋もれないようHTML上部に置くのが設計の勘所です。
用途別には、ブログ記事(BlogPosting)、商品・サービス(Product)、コーポレートトップ(Organization+WebSite)の3テンプレートを用意しました。導入は「コピー→head書き換え→body調整→構造化データ差し替え→検証→(URL変更時は)301リダイレクト」の手順で進め、W3C Nu HTML Checkerやリッチリザルトテストで公開前に検証します。タグ単位の書き方や公開前チェックリストはSEO対策に必須のHTMLタグ一覧を、実装テクニックと実測データはSEOに強いコーディングを辞書として併用してください。
そして2026年の視点として、生成AI検索にも特別なHTML対策は不要で、ここまでの基本がそのまま土台になるとGoogleが公式に明言していること、その露出はSearch Consoleの生成AIレポートで計測できることを押さえておきましょう。まずは本記事のテンプレートで自サイトのHTMLを整え、その上にコンテンツの質と量を積み上げていくことが、長期的なSEO成功への最短ルートです。
執筆根拠: 本記事は2026年7月時点の情報に基づき、Google検索セントラルの公式ドキュメント・公式ブログ(SEOスターターガイド、Googlebotのクロール仕様、生成AI検索の最適化ガイド、Search Consoleの生成AIパフォーマンスレポート発表)、W3C・web.dev・Schema.org・Open Graph Protocolの一次情報、および当サイトの実測データ(2026年7月計測。詳細はSEOに強いコーディングの実測レポート参照)をもとに執筆しています。