📚 ナレッジベース
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。
パンくず:BreadcrumbList
<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>
検証ツール
- Rich Results Test
- Search Console「拡張」レポート
ステップ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; }
+ 構造化データ BreadcrumbList を併用
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 に(最終手段)
モバイルフレンドリーテスト
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拡張 |