seo-optimizer について
ウェブサイトの SEO を監査・最適化するスキルです。単一ページの確認からサイト全体の見直しまで対応し、技術チェック、ページメタデータ、構造化データ、Core Web Vitals の監視を段階的に進めます。
主な機能
- 01クロールとインデックス可能性の監査
- 02タイトル、説明文、見出しの最適化
- 03Schema.org JSON-LD の実装
- 04サイトマップと正規 URL の管理
- 05Core Web Vitals のパフォーマンス調整
- 06検索パフォーマンスの監視
活用シーン
- 01クロールエラーやリンク切れの発見
- 02ページメタデータと内部リンクの改善
- 03構造化データの追加と検証
- 04インデックス状況と検索パフォーマンスの追跡
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pixel-process-ug/ superkit-agents --skill seo-optimizerインストール後、Claude Code で/seo-optimizerを入力して読み込まれたか確認します。
詳細
SEO 最適化
概要
テクニカル SEO、ページ内最適化、構造化データの実装、Core Web Vitals のパフォーマンス調整を通じて、検索エンジンでのウェブサイトの可視性を高めます。このスキルでは、クロール可能性、インデックス登録可能性、メタタグ戦略、Schema.org マークアップ、サイトマップ生成、正規 URL の管理、国際化(hreflang)、Google のランキングシグナルに向けたパフォーマンス最適化を扱います。
単一ページの監査からサイト全体の見直しまで、オーガニック検索のパフォーマンス改善が必要な場合はいつでも、このスキルを適用してください。
複数フェーズのプロセス
フェーズ 1:テクニカル監査
- サイトをクロールします(Screaming Frog、Sitebulb、またはカスタムスクリプト)
- robots.txt と XML サイトマップの有効性を確認します
- クロールエラー、リダイレクトチェーン、リンク切れを特定します
- 正規 URL と重複コンテンツへの対処を検証します
- モバイルフレンドリー対応とレスポンシブデザインを評価します
- HTTPS の実装と混在コンテンツを確認します
- ページ読み込みのパフォーマンス(Core Web Vitals)を評価します
停止 — 監査結果を文書化して優先順位を付けるまで、フェーズ 2 に進まないでください。
フェーズ 2:ページ内最適化
- タイトルタグを監査します(固有であること、50~60 文字、キーワードの配置)
- メタディスクリプションを確認します(固有であること、150~160 文字、魅力的な CTA)
- 見出しの階層を分析します(H1 は 1 つ、H2~H6 は論理的な構成)
- 画像の代替テキストとファイル名を最適化します
- 内部リンクの構造とアンカーテキストを確認します
- URL の構造を確認します(短く、説明的で、ハイフン区切りであること)
- Open Graph タグと Twitter Card タグを検証します
停止 — ページ内の変更を実装して検証するまで、フェーズ 3 に進まないでください。
フェーズ 3:構造化データの実装
- コンテンツに適用可能な Schema.org タイプを特定します
- JSON-LD 構造化データを実装します
- Google Rich Results Test で検証します
- リッチスニペットの対象となるかテストします
- Search Console で構造化データのエラーを監視します
停止 — 構造化データの検証に合格するまで、フェーズ 4 に進まないでください。
フェーズ 4:監視と反復
- Google Search Console の監視を設定します
- Core Web Vitals の推移を追跡します
- インデックス登録状況とカバレッジを監視します
- 検索パフォーマンス(クリック数、表示回数、CTR、掲載順位)を確認します
- クロールエラーやランキング低下のアラートを設定します
監査の優先順位決定表
| 検出事項 | 深刻度 | 修正の優先度 | 影響 |
|---|---|---|---|
| HTTPS なし/混在コンテンツ | 重大 | 即時 | ランキングへの悪影響、信頼性シグナル |
| 正規 URL がない | 重大 | 即時 | 重複コンテンツによる評価の分散 |
| リダイレクトチェーンの不備(3 回以上のホップ) | 高 | 今回のスプリント | クロールバジェットの浪費、リンクエクイティの損失 |
| タイトルタグがない、または重複している | 高 | 今回のスプリント | CTR の低下、ランキングの混乱 |
| 構造化データがない | 中 | 次回のスプリント | リッチスニペットの機会損失 |
| 画像に代替テキストがない | 中 | 次回のスプリント | アクセシビリティと画像検索での機会損失 |
| Core Web Vitals が最適でない | 中 | 次回のスプリント | ランキングシグナル、ユーザーエクスペリエンス |
| hreflang タグがない(多言語サイト) | 低 | バックログ | 地域ターゲティングの問題 |
| 説明的でない URL スラッグ | 低 | バックログ | ランキングと CTR への軽微な影響 |
メタタグのリファレンス
必須のメタタグ
<head>
<title>Primary Keyword - Secondary Keyword | Brand Name</title>
<meta name="description" content="Compelling 150-160 char description with target keyword and clear value proposition.">
<link rel="canonical" href="https://example.com/page">
<meta name="robots" content="index, follow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:type" content="website">
<meta property="og:title" content="Page Title for Social Sharing">
<meta property="og:description" content="Description optimized for social sharing.">
<meta property="og:image" content="https://example.com/og-image.jpg">
<meta property="og:url" content="https://example.com/page">
<meta property="og:site_name" content="Brand Name">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Page Title">
<meta name="twitter:description" content="Twitter-optimized description.">
<meta name="twitter:image" content="https://example.com/twitter-image.jpg">
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="de" href="https://example.com/de/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
</head>
メタタグ最適化マトリクス
| 要素 | 最大文字数 | 優先キーワード | よくある間違い |
|---|---|---|---|
| タイトルタグ | 50~60 文字 | 主要キーワードを前方に配置 | 長すぎる、キーワードの詰め込み、重複 |
| メタディスクリプション | 150~160 文字 | CTA とキーワードを含める | 未設定、重複、CTA がない |
| H1 | 該当なし(ページごとに 1 つ) | 主要キーワードのバリエーション | H1 が複数ある、H1 がない |
| URL スラッグ | 3~5 語 | ターゲットキーワード | 長すぎる、パラメーター、アンダースコア |
| 画像の代替テキスト | 125 文字 | 説明的で、自然な場合はキーワードを含める | 空欄、「画像の…」、キーワードの詰め込み |
| OG タイトル | 60~90 文字 | 魅力的で共有しやすい内容 | タイトルタグと同じ(機会損失) |
構造化データ(JSON-LD)
記事
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Optimize Core Web Vitals",
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://example.com/authors/jane-smith"
},
"datePublished": "2026-03-01",
"dateModified": "2026-03-15",
"image": "https://example.com/images/article-hero.jpg",
"publisher": {
"@type": "Organization",
"name": "Example Blog",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "A comprehensive guide to improving LCP, FID, and CLS scores."
}
</script>
商品
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget Pro",
"description": "Professional-grade widget for enterprise use.",
"image": "https://example.com/widget-pro.jpg",
"brand": { "@type": "Brand", "name": "WidgetCo" },
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/widget-pro"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "312"
}
}
</script>
FAQ ページ
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is Core Web Vitals?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Core Web Vitals are a set of metrics that measure real-world user experience for loading, interactivity, and visual stability."
}
}
]
}
</script>
スキーマタイプの選択ガイド
| コンテンツタイプ | スキーマタイプ | リッチリザルト |
|---|---|---|
| ブログ記事 | Article | 記事スニペット |
| 商品ページ | Product | 価格、評価、在庫状況 |
| FAQ セクション | FAQPage | 展開可能な Q&A |
| ハウツーガイド | HowTo | ステップごとのスニペット |
| レシピ | Recipe | 画像、所要時間、評価 |
| イベント | Event | 日付、場所、価格 |
| ローカルビジネス | LocalBusiness | マップパック、営業時間 |
| ソフトウェア | SoftwareApplication | 評価、価格 |
| パンくずリスト | BreadcrumbList | パンくずリスト |
| 動画 | VideoObject | サムネイル、再生時間 |
Core Web Vitals
指標としきい値
| 指標 | 良好 | 改善が必要 | 不良 | 測定対象 |
|---|---|---|---|---|
| LCP(Largest Contentful Paint) | <= 2.5s | <= 4.0s | > 4.0s | 読み込みパフォーマンス |
| INP(Interaction to Next Paint) | <= 200ms | <= 500ms | > 500ms | インタラクティブ性 |
| CLS(Cumulative Layout Shift) | <= 0.1 | <= 0.25 | > 0.25 | 視覚的な安定性 |
LCP の最適化
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high">
<picture>
<source srcset="/hero.avif" type="image/avif">
<source srcset="/hero.webp" type="image/webp">
<img src="/hero.jpg" alt="Hero description" width="1200" height="600"
fetchpriority="high" decoding="async">
</picture>
CLS の防止
/* Always set dimensions on images and video */
img, video {
width: 100%;
height: auto;
aspect-ratio: 16 / 9;
}
/* Reserve space for dynamic content */
.ad-slot {
min-height: 250px;
}
/* Avoid inserting content above existing content */
.notification-bar {
position: fixed; /* doesn't shift layout */
}
INP の最適化
// Break long tasks with yield
async function processLargeDataset(data) {
for (let i = 0; i < data.length; i++) {
processItem(data[i]);
if (i % 100 === 0) {
await new Promise(resolve => setTimeout(resolve, 0)); // yield to main thread
}
}
}
// Use requestIdleCallback for non-critical work
requestIdleCallback(() => {
loadAnalytics();
initNonCriticalFeatures();
});
XML サイトマップ
生成パターン
<?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-15</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/products</loc>
<lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
サイトマップのベストプラクティス
- サイトマップファイルあたりの URL は最大 50,000 件にします
- 大規模なサイトではサイトマップインデックスを使用します
- 正規 URL でインデックス可能な URL のみを含めます
- コンテンツが実際に変更された場合にのみ
lastmodを更新します - Google Search Console と robots.txt から送信します
robots.txt テンプレート
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /search?
Disallow: /*?sort=
Disallow: /*?filter=
Sitemap: https://example.com/sitemap.xml
Next.js / React の SEO パターン
Next.js Metadata API(App Router)
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: {
template: '%s | Brand Name',
default: 'Brand Name - Tagline',
},
description: 'Site-wide default description.',
openGraph: {
type: 'website',
locale: 'en_US',
url: 'https://example.com',
siteName: 'Brand Name',
},
twitter: {
card: 'summary_large_image',
},
robots: {
index: true,
follow: true,
},
alternates: {
canonical: 'https://example.com',
},
};
ページごとの動的メタデータ
export async function generateMetadata({ params }): Promise<Metadata> {
const product = await getProduct(params.slug);
return {
title: product.name,
description: product.description.slice(0, 160),
openGraph: {
title: product.name,
description: product.description.slice(0, 200),
images: [{ url: product.image, width: 1200, height: 630 }],
},
};
}
アンチパターン/よくある間違い
| アンチパターン | 失敗する理由 | 代わりに行うこと |
|---|---|---|
| タイトルやコンテンツへのキーワードの詰め込み | スパムフィルターに検出され、CTR が低下します | メインキーワードを自然に一度使い、類義語を加えます |
| ページ間で同じタイトル/説明を使用する | 重複コンテンツのシグナルとなり、機会を逃します | インデックス可能な URL ごとに、固有のページ固有メタデータを設定します |
| robots.txt で CSS/JS をブロックする | Googlebot がページをレンダリングできません | すべてのレンダリングリソースを許可します |
| 構造化データとページコンテンツが一致しない | Google のペナルティやリッチスニペットの削除につながります | スキーマは目に見えるコンテンツと正確に一致させます |
| 2 ホップを超えるリダイレクトチェーン | クロールバジェットの浪費やリンクエクイティの損失につながります | 最終的な移動先へ直接リダイレクトします |
| SSR リンクのない JS のみのナビゲーション | クローラーがページを見つけられません | ナビゲーションリンクをサーバーでレンダリングします |
| Core Web Vitals を無視する | ランキングシグナルが低下します | LCP、INP、CLS をプロファイリングして最適化します |
| 正規 URL がない | 重複コンテンツのペナルティにつながります | インデックス可能なすべてのページに正規 URL を設定します |
| アンカーテキストを過度に最適化する | 不自然なリンクパターンがペナルティにつながります | 説明的で多様なアンカーテキストを使用します |
| SEO のために CSS でコンテンツを隠す | クローキング違反になります | SEO コンテンツはすべてユーザーに見えるようにします |
不合理な正当化を防ぐためのガード
- 「サイトに問題はなさそう」という理由で技術監査を省略しないでください。クロールしてください。
- リッチリザルトテストに合格することを検証せずに、構造化データを追加しないでください。
- すべてのページタイプを確認せずに、メタタグが正しいと思い込まないでください。
- 変更前後の測定を行わずに、SEO の変更をデプロイしないでください。
- ユーザーエクスペリエンスを犠牲にして、検索エンジン向けの最適化を行わないでください。
統合ポイント
| スキル | 連携方法 |
|---|---|
content-creator | SEO に基づいて、マーケティングコンテンツのキーワードターゲティングと見出しの戦略を決定します |
content-research-writer | 調査に基づくコンテンツには、SEO に最適化された構成とメタタグが必要です |
senior-frontend | Core Web Vitals の最適化には、フロントエンドのパフォーマンス調整が必要です |
performance-optimization | ページ速度は LCP と INP のスコアに直接影響します |
deployment | SEO の変更には、適切なキャッシュの無効化とリダイレクト設定が必要です |
tech-docs-generator | ドキュメントサイトには、サイトマップ、正規 URL、構造化データの設定が必要です |
スキルの種類
FLEXIBLE — サイトの技術スタック、コンテンツの種類、競争環境に合わせて最適化戦略を調整します。技術的な SEO の基本と構造化データのベストプラクティスを強く推奨しますが、具体的な実装パターンはフレームワークによって異なります。
コメント
Markdown 対応