📚 ナレッジベース

04-05_SEO内部対策

最終更新 2026年08月25日 / 21_ナレッジベース/マニュアル_ナレッジ/制作部署/04-05_SEO内部対策.md

出典: 制作部署マニュアル SEO内部対策(自動ミラー・正本は /Users/oogushiyuuki/manual-terasu)

このPhaseのゴール

Phase 4 で決めたキーワード戦略を、実際のHTMLに反映して検索エンジンが理解しやすいサイトを作る。技術寄りSEOの核心。

Section 2 のチャプター5・6(オンページSEO・テクニカルSEO)の知識を、実装手順に落としたもの。


内部対策 実装フロー

1. 全ページの title・description 個別設定
2. 見出し階層(h1〜h3)整理
3. 構造化データ実装
4. 内部リンク戦略実装
5. パンくずリスト設置
6. URL設計の最終確認
7. 画像最適化(alt・WebP・lazy)
8. ページ速度最適化
9. モバイル最適化

→ 標準で 1-2日 で完結。


ステップ1:title・description の個別設定

全ページのリスト化

| URL | title | description |
|-----|-------|-------------|
| / | 税理士 港区|法人税申告・節税対策|株式会社○○ | 港区の税理士事務所。法人税申告・節税対策・記帳代行... |
| /service/ | サービス一覧|港区の税理士事務所 株式会社○○ | 法人税申告・節税対策・記帳代行... |
| /service/houjinzei/ | 法人税申告サービス|港区の税理士事務所 株式会社○○ | 法人税申告の代行サービス... |
| /contact/ | お問い合わせ|株式会社○○ | お問い合わせ・初回無料相談... |
| /about/ | 会社概要|株式会社○○ | 代表挨拶・会社情報・アクセス... |

titleのルール

  • 32文字以内
  • メインKWを前半に
  • 全ページユニーク
  • ブランド名は末尾

descriptionのルール

  • 120文字程度
  • メインKWを自然に含む
  • クリックする理由を提供(CTA含む)
  • 全ページユニーク

HTML 反映例

<head>
  <title>税理士 港区|法人税申告・節税対策|株式会社○○</title>
  <meta name="description" content="港区の税理士事務所。法人税申告・節税対策・記帳代行まで、創業20年の実績で経営者の課題に伴走。初回相談無料。お気軽にご相談ください。">
</head>

ステップ2:見出し階層(h1〜h3)の整理

階層ルール

  • h1:1ページ1個
  • h2:大セクション
  • h3:h2 の中の細分
  • h4以下:必要に応じて

正しい階層

<h1>港区の税理士事務所「株式会社○○」</h1>
<h2>サービス内容</h2>
  <h3>法人税申告</h3>
  <h3>節税対策</h3>
  <h3>記帳代行</h3>
<h2>料金プラン</h2>
  <h3>顧問プラン</h3>
  <h3>スポットプラン</h3>
<h2>選ばれる理由</h2>

確認ツール

  • Chrome DevTools → アクセシビリティ → ARIA Tree
  • ブラウザ拡張「HeadingsMap」
  • F12 → Console → document.querySelectorAll('h1, h2, h3').forEach(h => console.log(h.tagName, h.textContent))

NG

  • h1 が複数 → 順位下落リスク
  • h2 → h4 と飛ぶ → 階層崩壊
  • 装飾目的で h タグ → スタイルクラスで対応

ステップ3:構造化データ実装

全サイト共通(必須)

Organization

<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": "港区",
    "addressRegion": "東京都",
    "postalCode": "100-0000",
    "addressCountry": "JP"
  },
  "telephone": "+81-3-1234-5678",
  "sameAs": [
    "https://twitter.com/your_account",
    "https://www.facebook.com/your_account"
  ]
}
</script>

WebSite

<script type="application/ld+json">
{
  "@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>

ページタイプ別

サービス紹介ページ:Service

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "法人税申告サービス",
  "provider": {
    "@type": "Organization",
    "name": "株式会社○○"
  },
  "description": "法人税申告の代行サービス",
  "areaServed": {
    "@type": "AdministrativeArea",
    "name": "東京都"
  }
}
</script>

ブログ記事:Article

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "税理士の選び方5つのポイント",
  "image": "https://example.com/article/hero.jpg",
  "author": {
    "@type": "Person",
    "name": "山田 太郎"
  },
  "publisher": {
    "@type": "Organization",
    "name": "株式会社○○",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "datePublished": "2024-01-15",
  "dateModified": "2026-05-27"
}
</script>

FAQ ページ:FAQPage

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "顧問料はいくらですか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "月額3万円〜30万円で、企業規模により変動します。"
      }
    },
    {
      "@type": "Question",
      "name": "初回相談は無料ですか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "はい、初回60分無料です。"
      }
    }
  ]
}
</script>

→ FAQ構造化データを実装すると 検索結果でアコーディオン展開 → CTR大幅UP。

<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": "法人税申告", "item": "https://example.com/service/houjinzei/"}
  ]
}
</script>

ローカルビジネス:LocalBusiness(実店舗あり)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "株式会社○○",
  "address": {...},
  "telephone": "...",
  "openingHours": "Mo-Fr 09:00-18:00",
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 35.6580,
    "longitude": 139.7016
  }
}
</script>

検証ツール


ステップ4:内部リンク戦略

基本ルール

  • 重要ページに多くのリンクを集める(TOP・料金・お問い合わせ)
  • 関連性ある記事同士をリンク
  • アンカーテキストにキーワードを含める

内部リンクパターン

A. パンくずリスト(全ページ)

<nav aria-label="パンくず">
  <ol class="breadcrumb">
    <li><a href="/">ホーム</a></li>
    <li><a href="/service/">サービス</a></li>
    <li>法人税申告</li>
  </ol>
</nav>

B. 本文中の自然リンク

税理士の[選び方については別記事](/blog/zeirishi-erabikata/)で詳しく解説しています。

C. 関連記事(記事末)

<section class="related-posts">
  <h2>こちらの記事もおすすめ</h2>
  <ul>
    <li><a href="/blog/koumonryou-souba/">税理士の顧問料相場</a></li>
    <li><a href="/blog/zeirishi-zeirishi/">税理士と税理士法人の違い</a></li>
    <li><a href="/blog/setsuzei-houhou/">中小企業の節税方法10選</a></li>
  </ul>
</section>

D. グローバルナビ・フッター

全ページから主要ページへリンク。

アンカーテキストのコツ

NG OK
こちら 税理士の選び方
詳細 料金プランを見る
Read more サービス資料DL

リンク先の内容がアンカーテキストだけで分かるように。


ステップ5:パンくずリスト設置

階層が2層以上のサイトは必須

<nav aria-label="パンくず">
  <ol>
    <li><a href="/">ホーム</a></li>
    <li><a href="/service/">サービス</a></li>
    <li>法人税申告</li>
  </ol>
</nav>

CSS スタイル

.breadcrumb {
  list-style: none;
  display: flex;
  gap: 8px;
  font-size: 13px;
  padding: 0;
}
.breadcrumb li:not(:last-child)::after {
  content: ">";
  margin-left: 8px;
  color: #999;
}
.breadcrumb a {
  color: var(--y);
  text-decoration: none;
}
.breadcrumb a:hover { text-decoration: underline; }

SEO効果倍増。


ステップ6:URL設計の最終確認

良いURL

  • 短く・英語・ハイフン区切り
  • 階層は3-4層まで
  • 意味のある単語

✅ /service/houjinzei-shinkoku/
✅ /blog/zeirishi-erabikata/
❌ /page.php?id=123
❌ /アドレス/サービス/法人税
❌ /a/b/c/d/e/f/page.html

URL変更時は301リダイレクト必須

古いURLを変えたら必ず301で新URLに飛ばす。SEO評価引き継ぎ。


ステップ7:画像最適化

全画像の alt 設定

<img src="/hero.webp" alt="港区の税理士事務所外観" width="1200" height="800" loading="lazy" decoding="async">

必須属性

  • alt:画像内容(装飾は alt=""
  • width / height:CLS対策
  • loading="lazy":首画面外
  • decoding="async":並列デコード

WebP化

# sips で一括変換
for f in *.jpg; do
  sips -s format jpeg "$f" --out "${f%.jpg}.webp" --setProperty format webp
done

# または Squoosh(オンライン)
# https://squoosh.app/

ファイル名

NG: IMG_0042.jpg
OK: zeirishi-office-minato.webp

→ 英語・ハイフン区切り・意味あり。


ステップ8:ページ速度最適化

計測

PageSpeed Insights でURL入力。

目標

  • モバイル:90点以上
  • PC:95点以上
  • Core Web Vitals:全項目「良好」(緑)

改善ポイント

画像

  • WebP化
  • 適切なサイズ(1920px超えてないか)
  • loading="lazy"
  • width/height 明示

CSS

  • 不要なCSSの削除
  • minify(圧縮)
  • Critical CSS インライン化

JavaScript

  • 不要なJSの削減
  • async / defer 属性
  • サードパーティスクリプト最小化

フォント

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap" rel="stylesheet">

Cloudflare 最適化

  • Auto Minify ON
  • Brotli ON
  • HTTP/3 ON
  • Mirage(モバイル画像最適化)

ステップ9:モバイル最適化

viewport 設定

<meta name="viewport" content="width=device-width, initial-scale=1.0">

レスポンシブCSS

/* モバイルファースト */
.container { padding: 16px; }

@media (min-width: 768px) {
  .container { padding: 24px; }
}

@media (min-width: 1024px) {
  .container { padding: 32px; max-width: 1280px; margin: 0 auto; }
}

タップ範囲

  • 最低 44 × 44px
  • ボタン間隔 8px以上

横スクロール禁止

  • F12 → Device toolbar → 各サイズで確認
  • overflow-x: hidden を body に(最終手段)

モバイルフレンドリーテスト

Search Console モバイルユーザビリティ


Phase 5 完了判定

メタタグ

  • [ ] 全ページに個別 title 設定(32字以内)
  • [ ] 全ページに個別 description 設定(120字程度)
  • [ ] canonical URL 全ページ設定(絶対URL)

構造化データ

  • [ ] Organization 実装
  • [ ] WebSite 実装
  • [ ] BreadcrumbList 実装(階層2層以上)
  • [ ] 該当ページに LocalBusiness / Service / Article / FAQPage 等
  • [ ] Rich Results Test エラーゼロ

見出し階層

  • [ ] h1 が1ページ1個
  • [ ] h2 → h3 → h4 の階層厳守
  • [ ] メインKW が h1 に含まれる

内部リンク

  • [ ] パンくずリスト設置
  • [ ] 関連記事リンク3-5本
  • [ ] 本文中の自然な内部リンク
  • [ ] アンカーテキストにKW含む

画像

  • [ ] 全画像に alt 属性
  • [ ] WebP化済み
  • [ ] width/height 属性
  • [ ] loading="lazy" 設定

速度・モバイル

  • [ ] PageSpeed モバイル90+ / PC95+
  • [ ] Core Web Vitals 全項目緑
  • [ ] モバイルフレンドリーテスト合格

→ 全部 なら Phase 6(SEO外部対策) へ。


Phase 5 NG

NG 結果
全ページ同じ title・description 重複扱い・SEO評価分散
h1 が複数 SEO評価混乱
構造化データなし リッチリザルト機会喪失
画像 alt なし SEO・アクセシビリティで不利
ページ速度70点以下 順位低下
モバイル横スクロール発生 モバイル評価大幅低下
内部リンクなし クロール・回遊性低
URL変更時にリダイレクトなし SEO評価喪失

参考ツール

用途 ツール
速度測定 PageSpeed Insights / Lighthouse
構造化データ検証 Rich Results Test
画像最適化 Squoosh / TinyPNG
サイト構造分析 Screaming Frog(無料500URL)
モバイル確認 Search Console / Chrome DevTools
HeadingsMap Chrome拡張