opencode-skills-antigravity 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/ad-creative/SKILL.md +371 -0
- package/bundled-skills/ad-creative/evals/evals.json +90 -0
- package/bundled-skills/ad-creative/references/generative-tools.md +637 -0
- package/bundled-skills/ad-creative/references/platform-specs.md +213 -0
- package/bundled-skills/ai-seo/SKILL.md +407 -0
- package/bundled-skills/ai-seo/evals/evals.json +90 -0
- package/bundled-skills/ai-seo/references/content-patterns.md +285 -0
- package/bundled-skills/ai-seo/references/platform-ranking-factors.md +152 -0
- package/bundled-skills/backend-dev-guidelines/SKILL.md +1 -1
- package/bundled-skills/cc-skill-security-review/SKILL.md +1 -1
- package/bundled-skills/churn-prevention/SKILL.md +433 -0
- package/bundled-skills/churn-prevention/evals/evals.json +93 -0
- package/bundled-skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/bundled-skills/churn-prevention/references/dunning-playbook.md +408 -0
- package/bundled-skills/claude-api/LICENSE.txt +202 -0
- package/bundled-skills/claude-api/SKILL.md +252 -0
- package/bundled-skills/claude-api/csharp/claude-api.md +70 -0
- package/bundled-skills/claude-api/curl/examples.md +164 -0
- package/bundled-skills/claude-api/go/claude-api.md +146 -0
- package/bundled-skills/claude-api/java/claude-api.md +128 -0
- package/bundled-skills/claude-api/php/claude-api.md +88 -0
- package/bundled-skills/claude-api/python/agent-sdk/README.md +269 -0
- package/bundled-skills/claude-api/python/agent-sdk/patterns.md +319 -0
- package/bundled-skills/claude-api/python/claude-api/README.md +404 -0
- package/bundled-skills/claude-api/python/claude-api/batches.md +182 -0
- package/bundled-skills/claude-api/python/claude-api/files-api.md +162 -0
- package/bundled-skills/claude-api/python/claude-api/streaming.md +162 -0
- package/bundled-skills/claude-api/python/claude-api/tool-use.md +587 -0
- package/bundled-skills/claude-api/ruby/claude-api.md +87 -0
- package/bundled-skills/claude-api/shared/error-codes.md +205 -0
- package/bundled-skills/claude-api/shared/live-sources.md +121 -0
- package/bundled-skills/claude-api/shared/models.md +68 -0
- package/bundled-skills/claude-api/shared/tool-use-concepts.md +305 -0
- package/bundled-skills/claude-api/typescript/agent-sdk/README.md +220 -0
- package/bundled-skills/claude-api/typescript/agent-sdk/patterns.md +150 -0
- package/bundled-skills/claude-api/typescript/claude-api/README.md +313 -0
- package/bundled-skills/claude-api/typescript/claude-api/batches.md +106 -0
- package/bundled-skills/claude-api/typescript/claude-api/files-api.md +98 -0
- package/bundled-skills/claude-api/typescript/claude-api/streaming.md +178 -0
- package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +477 -0
- package/bundled-skills/codex-review/SKILL.md +1 -1
- package/bundled-skills/cold-email/SKILL.md +167 -0
- package/bundled-skills/cold-email/evals/evals.json +94 -0
- package/bundled-skills/cold-email/references/benchmarks.md +83 -0
- package/bundled-skills/cold-email/references/follow-up-sequences.md +81 -0
- package/bundled-skills/cold-email/references/frameworks.md +90 -0
- package/bundled-skills/cold-email/references/personalization.md +79 -0
- package/bundled-skills/cold-email/references/subject-lines.md +53 -0
- package/bundled-skills/content-strategy/SKILL.md +374 -0
- package/bundled-skills/content-strategy/evals/evals.json +90 -0
- package/bundled-skills/content-strategy/references/headless-cms.md +194 -0
- package/bundled-skills/context7-auto-research/SKILL.md +1 -1
- package/bundled-skills/dbos-golang/SKILL.md +1 -1
- package/bundled-skills/dbos-python/SKILL.md +1 -1
- package/bundled-skills/dbos-typescript/SKILL.md +1 -1
- package/bundled-skills/debug-buttercup/SKILL.md +1 -1
- package/bundled-skills/defuddle/SKILL.md +50 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/integrations/jetski-gemini-loader/package.json +1 -0
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-import-2026-03-21.md +81 -0
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/evaluation/SKILL.md +1 -1
- package/bundled-skills/exa-search/SKILL.md +1 -1
- package/bundled-skills/firecrawl-scraper/SKILL.md +1 -1
- package/bundled-skills/frontend-dev-guidelines/SKILL.md +1 -1
- package/bundled-skills/gha-security-review/SKILL.md +2 -1
- package/bundled-skills/git-pushing/SKILL.md +1 -1
- package/bundled-skills/internal-comms/LICENSE.txt +202 -0
- package/bundled-skills/internal-comms/SKILL.md +35 -0
- package/bundled-skills/internal-comms/examples/3p-updates.md +47 -0
- package/bundled-skills/internal-comms/examples/company-newsletter.md +65 -0
- package/bundled-skills/internal-comms/examples/faq-answers.md +30 -0
- package/bundled-skills/internal-comms/examples/general-comms.md +16 -0
- package/bundled-skills/json-canvas/SKILL.md +253 -0
- package/bundled-skills/json-canvas/references/EXAMPLES.md +329 -0
- package/bundled-skills/lead-magnets/SKILL.md +319 -0
- package/bundled-skills/lead-magnets/references/benchmarks.md +129 -0
- package/bundled-skills/lead-magnets/references/format-guide.md +196 -0
- package/bundled-skills/memory-systems/SKILL.md +1 -1
- package/bundled-skills/obsidian-bases/SKILL.md +506 -0
- package/bundled-skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/bundled-skills/obsidian-cli/SKILL.md +115 -0
- package/bundled-skills/obsidian-markdown/SKILL.md +205 -0
- package/bundled-skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/bundled-skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/bundled-skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/bundled-skills/product-marketing-context/SKILL.md +250 -0
- package/bundled-skills/product-marketing-context/evals/evals.json +85 -0
- package/bundled-skills/react-best-practices/SKILL.md +1 -1
- package/bundled-skills/revops/SKILL.md +352 -0
- package/bundled-skills/revops/evals/evals.json +91 -0
- package/bundled-skills/revops/references/automation-playbooks.md +290 -0
- package/bundled-skills/revops/references/lifecycle-definitions.md +278 -0
- package/bundled-skills/revops/references/routing-rules.md +203 -0
- package/bundled-skills/revops/references/scoring-models.md +247 -0
- package/bundled-skills/sales-enablement/SKILL.md +358 -0
- package/bundled-skills/sales-enablement/evals/evals.json +91 -0
- package/bundled-skills/sales-enablement/references/deck-frameworks.md +263 -0
- package/bundled-skills/sales-enablement/references/demo-scripts.md +355 -0
- package/bundled-skills/sales-enablement/references/objection-library.md +270 -0
- package/bundled-skills/sales-enablement/references/one-pager-templates.md +208 -0
- package/bundled-skills/seo/SKILL.md +139 -0
- package/bundled-skills/seo/references/cwv-thresholds.md +108 -0
- package/bundled-skills/seo/references/eeat-framework.md +214 -0
- package/bundled-skills/seo/references/quality-gates.md +155 -0
- package/bundled-skills/seo/references/schema-types.md +118 -0
- package/bundled-skills/seo-competitor-pages/SKILL.md +229 -0
- package/bundled-skills/seo-content/SKILL.md +186 -0
- package/bundled-skills/seo-dataforseo/SKILL.md +395 -0
- package/bundled-skills/seo-geo/SKILL.md +254 -0
- package/bundled-skills/seo-hreflang/SKILL.md +209 -0
- package/bundled-skills/seo-image-gen/SKILL.md +183 -0
- package/bundled-skills/seo-images/SKILL.md +193 -0
- package/bundled-skills/seo-page/SKILL.md +103 -0
- package/bundled-skills/seo-plan/SKILL.md +136 -0
- package/bundled-skills/seo-plan/assets/agency.md +175 -0
- package/bundled-skills/seo-plan/assets/ecommerce.md +167 -0
- package/bundled-skills/seo-plan/assets/generic.md +144 -0
- package/bundled-skills/seo-plan/assets/local-service.md +160 -0
- package/bundled-skills/seo-plan/assets/publisher.md +153 -0
- package/bundled-skills/seo-plan/assets/saas.md +135 -0
- package/bundled-skills/seo-programmatic/SKILL.md +184 -0
- package/bundled-skills/seo-schema/SKILL.md +178 -0
- package/bundled-skills/seo-sitemap/SKILL.md +129 -0
- package/bundled-skills/seo-technical/SKILL.md +175 -0
- package/bundled-skills/site-architecture/SKILL.md +366 -0
- package/bundled-skills/site-architecture/evals/evals.json +88 -0
- package/bundled-skills/site-architecture/references/mermaid-templates.md +216 -0
- package/bundled-skills/site-architecture/references/navigation-patterns.md +305 -0
- package/bundled-skills/site-architecture/references/site-type-templates.md +293 -0
- package/bundled-skills/skill-improver/SKILL.md +1 -1
- package/bundled-skills/tavily-web/SKILL.md +1 -1
- package/bundled-skills/test-fixing/SKILL.md +1 -1
- package/bundled-skills/tool-design/SKILL.md +1 -1
- package/bundled-skills/ui-ux-pro-max/SKILL.md +1 -1
- package/bundled-skills/verification-before-completion/SKILL.md +1 -1
- package/bundled-skills/wiki-changelog/SKILL.md +1 -1
- package/bundled-skills/wiki-onboarding/SKILL.md +1 -1
- package/bundled-skills/wiki-qa/SKILL.md +1 -1
- package/bundled-skills/wiki-researcher/SKILL.md +1 -1
- package/bundled-skills/wiki-vitepress/SKILL.md +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-hreflang
|
|
3
|
+
description: >
|
|
4
|
+
Hreflang and international SEO audit, validation, and generation. Detects
|
|
5
|
+
common mistakes, validates language/region codes, and generates correct
|
|
6
|
+
hreflang implementations. Use when user says "hreflang", "i18n SEO",
|
|
7
|
+
"international SEO", "multi-language", "multi-region", or "language tags".
|
|
8
|
+
risk: unknown
|
|
9
|
+
source: "https://github.com/AgriciDaniel/claude-seo"
|
|
10
|
+
date_added: "2026-03-21"
|
|
11
|
+
user-invokable: true
|
|
12
|
+
argument-hint: "[url]"
|
|
13
|
+
allowed-tools:
|
|
14
|
+
- Read
|
|
15
|
+
- Grep
|
|
16
|
+
- Glob
|
|
17
|
+
- Bash
|
|
18
|
+
- WebFetch
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Hreflang & International SEO
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- Use when validating or generating hreflang for multilingual or multiregional sites.
|
|
26
|
+
- Use when the user mentions international SEO, language tags, x-default, or hreflang issues.
|
|
27
|
+
- Use when auditing locale alternates across HTML, headers, or sitemap implementations.
|
|
28
|
+
|
|
29
|
+
Validate existing hreflang implementations or generate correct hreflang tags
|
|
30
|
+
for multi-language and multi-region sites. Supports HTML, HTTP header, and
|
|
31
|
+
XML sitemap implementations.
|
|
32
|
+
|
|
33
|
+
## Validation Checks
|
|
34
|
+
|
|
35
|
+
### 1. Self-Referencing Tags
|
|
36
|
+
- Every page must include an hreflang tag pointing to itself
|
|
37
|
+
- The self-referencing URL must exactly match the page's canonical URL
|
|
38
|
+
- Missing self-referencing tags cause Google to ignore the entire hreflang set
|
|
39
|
+
|
|
40
|
+
### 2. Return Tags
|
|
41
|
+
- If page A links to page B with hreflang, page B must link back to page A
|
|
42
|
+
- Every hreflang relationship must be bidirectional (A→B and B→A)
|
|
43
|
+
- Missing return tags invalidate the hreflang signal for both pages
|
|
44
|
+
- Check all language versions reference each other (full mesh)
|
|
45
|
+
|
|
46
|
+
### 3. x-default Tag
|
|
47
|
+
- Required: designates the fallback page for unmatched languages/regions
|
|
48
|
+
- Typically points to the language selector page or English version
|
|
49
|
+
- Only one x-default per set of alternates
|
|
50
|
+
- Must also have return tags from all other language versions
|
|
51
|
+
|
|
52
|
+
### 4. Language Code Validation
|
|
53
|
+
- Must use ISO 639-1 two-letter codes (e.g., `en`, `fr`, `de`, `ja`)
|
|
54
|
+
- Common errors:
|
|
55
|
+
- `eng` instead of `en` (ISO 639-2, not valid for hreflang)
|
|
56
|
+
- `jp` instead of `ja` (incorrect code for Japanese)
|
|
57
|
+
- `zh` without region qualifier (ambiguous; use `zh-Hans` or `zh-Hant`)
|
|
58
|
+
|
|
59
|
+
### 5. Region Code Validation
|
|
60
|
+
- Optional region qualifier uses ISO 3166-1 Alpha-2 (e.g., `en-US`, `en-GB`, `pt-BR`)
|
|
61
|
+
- Format: `language-REGION` (lowercase language, uppercase region)
|
|
62
|
+
- Common errors:
|
|
63
|
+
- `en-uk` instead of `en-GB` (UK is not a valid ISO 3166-1 code)
|
|
64
|
+
- `es-LA` (Latin America is not a country; use specific countries)
|
|
65
|
+
- Region without language prefix
|
|
66
|
+
|
|
67
|
+
### 6. Canonical URL Alignment
|
|
68
|
+
- Hreflang tags must only appear on canonical URLs
|
|
69
|
+
- If a page has `rel=canonical` pointing elsewhere, hreflang on that page is ignored
|
|
70
|
+
- The canonical URL and hreflang URL must match exactly (including trailing slashes)
|
|
71
|
+
- Non-canonical pages should not be in any hreflang set
|
|
72
|
+
|
|
73
|
+
### 7. Protocol Consistency
|
|
74
|
+
- All URLs in an hreflang set must use the same protocol (HTTPS or HTTP)
|
|
75
|
+
- Mixed HTTP/HTTPS in hreflang sets causes validation failures
|
|
76
|
+
- After HTTPS migration, update all hreflang tags to HTTPS
|
|
77
|
+
|
|
78
|
+
### 8. Cross-Domain Support
|
|
79
|
+
- Hreflang works across different domains (e.g., example.com and example.de)
|
|
80
|
+
- Cross-domain hreflang requires return tags on both domains
|
|
81
|
+
- Verify both domains are verified in Google Search Console
|
|
82
|
+
- Sitemap-based implementation recommended for cross-domain setups
|
|
83
|
+
|
|
84
|
+
## Common Mistakes
|
|
85
|
+
|
|
86
|
+
| Issue | Severity | Fix |
|
|
87
|
+
|-------|----------|-----|
|
|
88
|
+
| Missing self-referencing tag | Critical | Add hreflang pointing to same page URL |
|
|
89
|
+
| Missing return tags (A→B but no B→A) | Critical | Add matching return tags on all alternates |
|
|
90
|
+
| Missing x-default | High | Add x-default pointing to fallback/selector page |
|
|
91
|
+
| Invalid language code (e.g., `eng`) | High | Use ISO 639-1 two-letter codes |
|
|
92
|
+
| Invalid region code (e.g., `en-uk`) | High | Use ISO 3166-1 Alpha-2 codes |
|
|
93
|
+
| Hreflang on non-canonical URL | High | Move hreflang to canonical URL only |
|
|
94
|
+
| HTTP/HTTPS mismatch in URLs | Medium | Standardize all URLs to HTTPS |
|
|
95
|
+
| Trailing slash inconsistency | Medium | Match canonical URL format exactly |
|
|
96
|
+
| Hreflang in both HTML and sitemap | Low | Choose one method (sitemap preferred for large sites) |
|
|
97
|
+
| Language without region when needed | Low | Add region qualifier for geo-targeted content |
|
|
98
|
+
|
|
99
|
+
## Implementation Methods
|
|
100
|
+
|
|
101
|
+
### Method 1: HTML Link Tags
|
|
102
|
+
Best for: Sites with <50 language/region variants per page.
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
|
|
106
|
+
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" />
|
|
107
|
+
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
|
|
108
|
+
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Place in `<head>` section. Every page must include all alternates including itself.
|
|
112
|
+
|
|
113
|
+
### Method 2: HTTP Headers
|
|
114
|
+
Best for: Non-HTML files (PDFs, documents).
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US",
|
|
118
|
+
<https://example.com/fr/page>; rel="alternate"; hreflang="fr",
|
|
119
|
+
<https://example.com/page>; rel="alternate"; hreflang="x-default"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Set via server configuration or CDN rules.
|
|
123
|
+
|
|
124
|
+
### Method 3: XML Sitemap (Recommended for large sites)
|
|
125
|
+
Best for: Sites with many language variants, cross-domain setups, or 50+ pages.
|
|
126
|
+
|
|
127
|
+
See Hreflang Sitemap Generation section below.
|
|
128
|
+
|
|
129
|
+
### Method Comparison
|
|
130
|
+
| Method | Best For | Pros | Cons |
|
|
131
|
+
|--------|----------|------|------|
|
|
132
|
+
| HTML link tags | Small sites (<50 variants) | Easy to implement, visible in source | Bloats `<head>`, hard to maintain at scale |
|
|
133
|
+
| HTTP headers | Non-HTML files | Works for PDFs, images | Complex server config, not visible in HTML |
|
|
134
|
+
| XML sitemap | Large sites, cross-domain | Scalable, centralized management | Not visible on page, requires sitemap maintenance |
|
|
135
|
+
|
|
136
|
+
## Hreflang Generation
|
|
137
|
+
|
|
138
|
+
### Process
|
|
139
|
+
1. **Detect languages**: Scan site for language indicators (URL path, subdomain, TLD, HTML lang attribute)
|
|
140
|
+
2. **Map page equivalents**: Match corresponding pages across languages/regions
|
|
141
|
+
3. **Validate language codes**: Verify all codes against ISO 639-1 and ISO 3166-1
|
|
142
|
+
4. **Generate tags**: Create hreflang tags for each page including self-referencing
|
|
143
|
+
5. **Verify return tags**: Confirm all relationships are bidirectional
|
|
144
|
+
6. **Add x-default**: Set fallback for each page set
|
|
145
|
+
7. **Output**: Generate implementation code (HTML, HTTP headers, or sitemap XML)
|
|
146
|
+
|
|
147
|
+
## Hreflang Sitemap Generation
|
|
148
|
+
|
|
149
|
+
### Sitemap with Hreflang
|
|
150
|
+
```xml
|
|
151
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
152
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
|
153
|
+
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
|
154
|
+
<url>
|
|
155
|
+
<loc>https://example.com/page</loc>
|
|
156
|
+
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
|
|
157
|
+
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
|
|
158
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
|
|
159
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
|
|
160
|
+
</url>
|
|
161
|
+
<url>
|
|
162
|
+
<loc>https://example.com/fr/page</loc>
|
|
163
|
+
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" />
|
|
164
|
+
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" />
|
|
165
|
+
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" />
|
|
166
|
+
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
|
|
167
|
+
</url>
|
|
168
|
+
</urlset>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Key rules:
|
|
172
|
+
- Include the `xmlns:xhtml` namespace declaration
|
|
173
|
+
- Every `<url>` entry must include ALL language alternates (including itself)
|
|
174
|
+
- Each alternate must appear as a separate `<url>` entry with its own full set
|
|
175
|
+
- Split at 50,000 URLs per sitemap file
|
|
176
|
+
|
|
177
|
+
## Output
|
|
178
|
+
|
|
179
|
+
### Hreflang Validation Report
|
|
180
|
+
|
|
181
|
+
#### Summary
|
|
182
|
+
- Total pages scanned: XX
|
|
183
|
+
- Language variants detected: XX
|
|
184
|
+
- Issues found: XX (Critical: X, High: X, Medium: X, Low: X)
|
|
185
|
+
|
|
186
|
+
#### Validation Results
|
|
187
|
+
| Language | URL | Self-Ref | Return Tags | x-default | Status |
|
|
188
|
+
|----------|-----|----------|-------------|-----------|--------|
|
|
189
|
+
| en-US | https://... | ✅ | ✅ | ✅ | ✅ |
|
|
190
|
+
| fr | https://... | ❌ | ⚠️ | ✅ | ❌ |
|
|
191
|
+
| de | https://... | ✅ | ❌ | ✅ | ❌ |
|
|
192
|
+
|
|
193
|
+
### Generated Hreflang Tags
|
|
194
|
+
- HTML `<link>` tags (if HTML method chosen)
|
|
195
|
+
- HTTP header values (if header method chosen)
|
|
196
|
+
- `hreflang-sitemap.xml` (if sitemap method chosen)
|
|
197
|
+
|
|
198
|
+
### Recommendations
|
|
199
|
+
- Missing implementations to add
|
|
200
|
+
- Incorrect codes to fix
|
|
201
|
+
- Method migration suggestions (e.g., HTML to sitemap for scale)
|
|
202
|
+
|
|
203
|
+
## Error Handling
|
|
204
|
+
|
|
205
|
+
| Scenario | Action |
|
|
206
|
+
|----------|--------|
|
|
207
|
+
| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess site structure. Suggest the user verify the URL and try again. |
|
|
208
|
+
| No hreflang tags found | Report the absence. Check for other internationalization signals (subdirectories, subdomains, ccTLDs) and recommend the appropriate hreflang implementation method. |
|
|
209
|
+
| Invalid language/region codes detected | List each invalid code with the correct replacement. Provide a corrected hreflang tag set ready to implement. |
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-image-gen
|
|
3
|
+
description: "Generate SEO-focused images such as OG cards, hero images, schema assets, product visuals, and infographics. Use when image generation is part of an SEO workflow or content publishing task."
|
|
4
|
+
risk: unknown
|
|
5
|
+
source: "https://github.com/AgriciDaniel/claude-seo"
|
|
6
|
+
date_added: "2026-03-21"
|
|
7
|
+
argument-hint: "[og|hero|product|infographic|custom|batch] <description>"
|
|
8
|
+
user-invokable: true
|
|
9
|
+
allowed-tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Grep
|
|
12
|
+
- Glob
|
|
13
|
+
- Bash
|
|
14
|
+
- WebFetch
|
|
15
|
+
- Write
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# SEO Image Gen: AI Image Generation for SEO Assets (Extension)
|
|
19
|
+
|
|
20
|
+
Generate production-ready images for SEO use cases using Gemini's image generation
|
|
21
|
+
via the banana Creative Director pipeline. Maps SEO needs to optimized domain modes,
|
|
22
|
+
aspect ratios, and resolution defaults.
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- Use when generating OG images, hero images, schema visuals, infographics, or similar SEO assets.
|
|
27
|
+
- Use when image generation is part of a broader SEO or publishing workflow.
|
|
28
|
+
- Use only when the required image-generation extension is available.
|
|
29
|
+
|
|
30
|
+
## Architecture Note
|
|
31
|
+
|
|
32
|
+
This skill has two components with distinct roles:
|
|
33
|
+
- **SKILL.md** (this file): Handles interactive `/seo image-gen` commands for generating images
|
|
34
|
+
- **Agent** (`agents/seo-image-gen.md`): Audit-only analyst spawned during `/seo audit` to assess existing OG/social images and produce a generation plan (never auto-generates)
|
|
35
|
+
|
|
36
|
+
## Prerequisites
|
|
37
|
+
|
|
38
|
+
This skill requires the banana extension to be installed:
|
|
39
|
+
```bash
|
|
40
|
+
./extensions/banana/install.sh
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Check availability:** Before using any image generation tool, verify the MCP server
|
|
44
|
+
is connected by checking if `gemini_generate_image` or `set_aspect_ratio` tools are
|
|
45
|
+
available. If tools are not available, inform the user the extension is not installed
|
|
46
|
+
and provide install instructions.
|
|
47
|
+
|
|
48
|
+
## Quick Reference
|
|
49
|
+
|
|
50
|
+
| Command | What it does |
|
|
51
|
+
|---------|-------------|
|
|
52
|
+
| `/seo image-gen og <description>` | Generate OG/social preview image (1200x630 feel) |
|
|
53
|
+
| `/seo image-gen hero <description>` | Blog hero image (widescreen, dramatic) |
|
|
54
|
+
| `/seo image-gen product <description>` | Product photography (clean, white BG) |
|
|
55
|
+
| `/seo image-gen infographic <description>` | Infographic visual (vertical, data-heavy) |
|
|
56
|
+
| `/seo image-gen custom <description>` | Custom image with full Creative Director pipeline |
|
|
57
|
+
| `/seo image-gen batch <description> [N]` | Generate N variations (default: 3) |
|
|
58
|
+
|
|
59
|
+
## SEO Image Use Cases
|
|
60
|
+
|
|
61
|
+
Each use case maps to pre-configured banana parameters:
|
|
62
|
+
|
|
63
|
+
| Use Case | Aspect Ratio | Resolution | Domain Mode | Notes |
|
|
64
|
+
|----------|-------------|------------|-------------|-------|
|
|
65
|
+
| **OG/Social Preview** | `16:9` | `1K` | Product or UI/Web | Clean, professional, text-friendly |
|
|
66
|
+
| **Blog Hero** | `16:9` | `2K` | Cinema or Editorial | Dramatic, atmospheric, editorial quality |
|
|
67
|
+
| **Schema Image** | `4:3` | `1K` | Product | Clean, descriptive, schema ImageObject |
|
|
68
|
+
| **Social Square** | `1:1` | `1K` | UI/Web | Platform-optimized square |
|
|
69
|
+
| **Product Photo** | `4:3` | `2K` | Product | White background, studio lighting |
|
|
70
|
+
| **Infographic** | `2:3` | `4K` | Infographic | Data-heavy, vertical layout |
|
|
71
|
+
| **Favicon/Icon** | `1:1` | `512` | Logo | Minimal, scalable, recognizable |
|
|
72
|
+
| **Pinterest Pin** | `2:3` | `2K` | Editorial | Tall vertical card |
|
|
73
|
+
|
|
74
|
+
## Generation Pipeline
|
|
75
|
+
|
|
76
|
+
For every generation request:
|
|
77
|
+
|
|
78
|
+
1. **Identify use case** from command or context (og, hero, product, etc.)
|
|
79
|
+
2. **Apply SEO defaults** from the use cases table above
|
|
80
|
+
3. **Set aspect ratio** via `set_aspect_ratio` MCP tool
|
|
81
|
+
4. **Construct Reasoning Brief** using the banana Creative Director pipeline:
|
|
82
|
+
- Load `references/prompt-engineering.md` for the 6-component system
|
|
83
|
+
- Apply domain mode emphasis (Subject 30%, Style 25%, Context 15%, etc.)
|
|
84
|
+
- Be SPECIFIC and VISCERAL: describe what the camera sees
|
|
85
|
+
5. **Generate** via `gemini_generate_image` MCP tool
|
|
86
|
+
6. **Post-generation SEO checklist** (see below)
|
|
87
|
+
|
|
88
|
+
### Check for Presets
|
|
89
|
+
|
|
90
|
+
If the user mentions a brand or has SEO presets configured:
|
|
91
|
+
```bash
|
|
92
|
+
python3 ~/.claude/skills/seo-image-gen/scripts/presets.py list
|
|
93
|
+
```
|
|
94
|
+
Load matching preset and apply as defaults. Also check `references/seo-image-presets.md`
|
|
95
|
+
for SEO-specific preset templates.
|
|
96
|
+
|
|
97
|
+
## Post-Generation SEO Checklist
|
|
98
|
+
|
|
99
|
+
After every successful generation, guide the user on:
|
|
100
|
+
|
|
101
|
+
1. **Alt text**:Write descriptive, keyword-rich alt text for the generated image
|
|
102
|
+
2. **File naming**:Rename to SEO-friendly format: `keyword-description-widthxheight.webp`
|
|
103
|
+
3. **WebP conversion**:Convert to WebP for optimal page speed:
|
|
104
|
+
```bash
|
|
105
|
+
magick output.png -quality 85 output.webp
|
|
106
|
+
```
|
|
107
|
+
4. **File size**:Target under 200KB for hero images, under 100KB for thumbnails
|
|
108
|
+
5. **Schema markup**:Suggest `ImageObject` schema for the generated image:
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"@type": "ImageObject",
|
|
112
|
+
"url": "https://example.com/images/keyword-description.webp",
|
|
113
|
+
"width": 1200,
|
|
114
|
+
"height": 630,
|
|
115
|
+
"caption": "Descriptive caption with target keyword"
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
6. **OG meta tags**:For social preview images, remind about:
|
|
119
|
+
```html
|
|
120
|
+
<meta property="og:image" content="https://example.com/images/og-image.webp" />
|
|
121
|
+
<meta property="og:image:width" content="1200" />
|
|
122
|
+
<meta property="og:image:height" content="630" />
|
|
123
|
+
<meta property="og:image:alt" content="Descriptive alt text" />
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Cost Awareness
|
|
127
|
+
|
|
128
|
+
Image generation costs money. Be transparent:
|
|
129
|
+
- Show estimated cost before generating (especially for batch)
|
|
130
|
+
- Log every generation: `python3 ~/.claude/skills/seo-image-gen/scripts/cost_tracker.py log --model MODEL --resolution RES --prompt "brief"`
|
|
131
|
+
- Run `cost_tracker.py summary` if user asks about usage
|
|
132
|
+
|
|
133
|
+
Approximate costs (gemini-3.1-flash):
|
|
134
|
+
- 512: ~$0.02/image
|
|
135
|
+
- 1K resolution: ~$0.04/image
|
|
136
|
+
- 2K resolution: ~$0.08/image
|
|
137
|
+
- 4K resolution: ~$0.16/image
|
|
138
|
+
|
|
139
|
+
## Model Routing
|
|
140
|
+
|
|
141
|
+
| Scenario | Model | Why |
|
|
142
|
+
|----------|-------|-----|
|
|
143
|
+
| OG images, social previews | `gemini-3.1-flash-image-preview` @ 1K | Fast, cost-effective |
|
|
144
|
+
| Hero images, product photos | `gemini-3.1-flash-image-preview` @ 2K | Quality + detail |
|
|
145
|
+
| Infographics with text | `gemini-3.1-flash-image-preview` @ 2K, thinking: high | Better text rendering |
|
|
146
|
+
| Quick drafts | `gemini-2.5-flash-image` @ 512 | Rapid iteration |
|
|
147
|
+
|
|
148
|
+
## Error Handling
|
|
149
|
+
|
|
150
|
+
| Error | Resolution |
|
|
151
|
+
|-------|-----------|
|
|
152
|
+
| MCP not configured | Run `./extensions/banana/install.sh` |
|
|
153
|
+
| API key invalid | New key at https://aistudio.google.com/apikey |
|
|
154
|
+
| Rate limited (429) | Wait 60s, retry. Free tier: ~10 RPM / ~500 RPD |
|
|
155
|
+
| `IMAGE_SAFETY` | Rephrase prompt - see `references/prompt-engineering.md` Safety section |
|
|
156
|
+
| MCP unavailable | Fall back: `python3 ~/.claude/skills/seo-image-gen/scripts/generate.py --prompt "..." --aspect-ratio "16:9"` |
|
|
157
|
+
| Extension not installed | Show install instructions: `./extensions/banana/install.sh` |
|
|
158
|
+
|
|
159
|
+
## Cross-Skill Integration
|
|
160
|
+
|
|
161
|
+
- **seo-images** (analysis) feeds into **seo-image-gen** (generation): audit results from `/seo images` identify missing or low-quality images; use those findings to drive `/seo image-gen` commands
|
|
162
|
+
- **seo-audit** spawns the seo-image-gen **agent** (not this skill) to analyze OG/social images across the site and produce a prioritized generation plan
|
|
163
|
+
- **seo-schema** can consume generated images: after generation, suggest `ImageObject` schema markup pointing to the new assets
|
|
164
|
+
|
|
165
|
+
## Reference Documentation
|
|
166
|
+
|
|
167
|
+
Load on-demand. Do NOT load all at startup:
|
|
168
|
+
- `references/prompt-engineering.md`:6-component system, domain modes, templates
|
|
169
|
+
- `references/gemini-models.md`:Model specs, rate limits, capabilities
|
|
170
|
+
- `references/mcp-tools.md`:MCP tool parameters and responses
|
|
171
|
+
- `references/post-processing.md`:ImageMagick/FFmpeg pipeline recipes
|
|
172
|
+
- `references/cost-tracking.md`:Pricing, usage tracking
|
|
173
|
+
- `references/presets.md`:Brand preset management
|
|
174
|
+
- `references/seo-image-presets.md`:SEO-specific preset templates
|
|
175
|
+
|
|
176
|
+
## Response Format
|
|
177
|
+
|
|
178
|
+
After generating, always provide:
|
|
179
|
+
1. **Image path**:where it was saved
|
|
180
|
+
2. **Crafted prompt**:show what was sent to the API (educational)
|
|
181
|
+
3. **Settings**:model, aspect ratio, resolution
|
|
182
|
+
4. **SEO checklist**:alt text suggestion, file naming, WebP conversion
|
|
183
|
+
5. **Schema snippet**:ImageObject or og:image markup if applicable
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-images
|
|
3
|
+
description: >
|
|
4
|
+
Image optimization analysis for SEO and performance. Checks alt text, file
|
|
5
|
+
sizes, formats, responsive images, lazy loading, and CLS prevention. Use when
|
|
6
|
+
user says "image optimization", "alt text", "image SEO", "image size",
|
|
7
|
+
or "image audit".
|
|
8
|
+
risk: unknown
|
|
9
|
+
source: "https://github.com/AgriciDaniel/claude-seo"
|
|
10
|
+
date_added: "2026-03-21"
|
|
11
|
+
user-invokable: true
|
|
12
|
+
argument-hint: "[url]"
|
|
13
|
+
allowed-tools:
|
|
14
|
+
- Read
|
|
15
|
+
- Grep
|
|
16
|
+
- Glob
|
|
17
|
+
- Bash
|
|
18
|
+
- WebFetch
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Image Optimization Analysis
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- Use when auditing image SEO, alt text, file sizes, formats, or lazy loading.
|
|
26
|
+
- Use when the user wants image-specific performance recommendations.
|
|
27
|
+
- Use when checking media quality signals that affect both SEO and Core Web Vitals.
|
|
28
|
+
|
|
29
|
+
## Checks
|
|
30
|
+
|
|
31
|
+
### Alt Text
|
|
32
|
+
- Present on all `<img>` elements (except decorative: `role="presentation"`)
|
|
33
|
+
- Descriptive: describes the image content, not "image.jpg" or "photo"
|
|
34
|
+
- Includes relevant keywords where natural, not keyword-stuffed
|
|
35
|
+
- Length: 10-125 characters
|
|
36
|
+
|
|
37
|
+
**Good examples:**
|
|
38
|
+
- "Professional plumber repairing kitchen sink faucet"
|
|
39
|
+
- "Red 2024 Toyota Camry sedan front view"
|
|
40
|
+
- "Team meeting in modern office conference room"
|
|
41
|
+
|
|
42
|
+
**Bad examples:**
|
|
43
|
+
- "image.jpg" (filename, not description)
|
|
44
|
+
- "plumber plumbing plumber services" (keyword stuffing)
|
|
45
|
+
- "Click here" (not descriptive)
|
|
46
|
+
|
|
47
|
+
### File Size
|
|
48
|
+
|
|
49
|
+
**Tiered thresholds by image category:**
|
|
50
|
+
|
|
51
|
+
| Image Category | Target | Warning | Critical |
|
|
52
|
+
|----------------|--------|---------|----------|
|
|
53
|
+
| Thumbnails | < 50KB | > 100KB | > 200KB |
|
|
54
|
+
| Content images | < 100KB | > 200KB | > 500KB |
|
|
55
|
+
| Hero/banner images | < 200KB | > 300KB | > 700KB |
|
|
56
|
+
|
|
57
|
+
Recommend compression to target thresholds where possible without quality loss.
|
|
58
|
+
|
|
59
|
+
### Format
|
|
60
|
+
| Format | Browser Support | Use Case |
|
|
61
|
+
|--------|-----------------|----------|
|
|
62
|
+
| WebP | 97%+ | Default recommendation |
|
|
63
|
+
| AVIF | 92%+ | Best compression, newer |
|
|
64
|
+
| JPEG | 100% | Fallback for photos |
|
|
65
|
+
| PNG | 100% | Graphics with transparency |
|
|
66
|
+
| SVG | 100% | Icons, logos, illustrations |
|
|
67
|
+
|
|
68
|
+
Recommend WebP/AVIF over JPEG/PNG. Check for `<picture>` element with format fallbacks.
|
|
69
|
+
|
|
70
|
+
#### Recommended `<picture>` Element Pattern
|
|
71
|
+
|
|
72
|
+
Use progressive enhancement with the most efficient format first:
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<picture>
|
|
76
|
+
<source srcset="image.avif" type="image/avif">
|
|
77
|
+
<source srcset="image.webp" type="image/webp">
|
|
78
|
+
<img src="image.jpg" alt="Descriptive alt text" width="800" height="600" loading="lazy" decoding="async">
|
|
79
|
+
</picture>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The browser will use the first supported format. Current browser support: AVIF 93.8%, WebP 95.3%.
|
|
83
|
+
|
|
84
|
+
#### JPEG XL: Emerging Format
|
|
85
|
+
|
|
86
|
+
In November 2025, Google's Chromium team reversed its 2022 decision and announced it will restore JPEG XL support in Chrome using a Rust-based decoder. The implementation is feature-complete but not yet in Chrome stable. JPEG XL offers lossless JPEG recompression (~20% savings with zero quality loss) and competitive lossy compression. Not yet practical for web deployment, but worth monitoring for future adoption.
|
|
87
|
+
|
|
88
|
+
### Responsive Images
|
|
89
|
+
- `srcset` attribute for multiple sizes
|
|
90
|
+
- `sizes` attribute matching layout breakpoints
|
|
91
|
+
- Appropriate resolution for device pixel ratios
|
|
92
|
+
|
|
93
|
+
```html
|
|
94
|
+
<img
|
|
95
|
+
src="image-800.jpg"
|
|
96
|
+
srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
|
|
97
|
+
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
|
|
98
|
+
alt="Description"
|
|
99
|
+
>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Lazy Loading
|
|
103
|
+
- `loading="lazy"` on below-fold images
|
|
104
|
+
- Do NOT lazy-load above-fold/hero images (hurts LCP)
|
|
105
|
+
- Check for native vs JavaScript-based lazy loading
|
|
106
|
+
|
|
107
|
+
```html
|
|
108
|
+
<!-- Below fold - lazy load -->
|
|
109
|
+
<img src="photo.jpg" loading="lazy" alt="Description">
|
|
110
|
+
|
|
111
|
+
<!-- Above fold - eager load (default) -->
|
|
112
|
+
<img src="hero.jpg" alt="Hero image">
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### `fetchpriority="high"` for LCP Images
|
|
116
|
+
|
|
117
|
+
Add `fetchpriority="high"` to your hero/LCP image to prioritize its download in the browser's network queue:
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<img src="hero.webp" fetchpriority="high" alt="Hero image description" width="1200" height="630">
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Critical:** Do NOT lazy-load above-the-fold/LCP images. Using `loading="lazy"` on LCP images directly harms LCP scores. Reserve `loading="lazy"` for below-the-fold images only.
|
|
124
|
+
|
|
125
|
+
### `decoding="async"` for Non-LCP Images
|
|
126
|
+
|
|
127
|
+
Add `decoding="async"` to non-LCP images to prevent image decoding from blocking the main thread:
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<img src="photo.webp" alt="Description" width="600" height="400" loading="lazy" decoding="async">
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### CLS Prevention
|
|
134
|
+
- `width` and `height` attributes set on all `<img>` elements
|
|
135
|
+
- `aspect-ratio` CSS as alternative
|
|
136
|
+
- Flag images without dimensions
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<!-- Good - dimensions set -->
|
|
140
|
+
<img src="photo.jpg" width="800" height="600" alt="Description">
|
|
141
|
+
|
|
142
|
+
<!-- Good - CSS aspect ratio -->
|
|
143
|
+
<img src="photo.jpg" style="aspect-ratio: 4/3" alt="Description">
|
|
144
|
+
|
|
145
|
+
<!-- Bad - no dimensions -->
|
|
146
|
+
<img src="photo.jpg" alt="Description">
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### File Names
|
|
150
|
+
- Descriptive: `blue-running-shoes.webp` not `IMG_1234.jpg`
|
|
151
|
+
- Hyphenated, lowercase, no special characters
|
|
152
|
+
- Include relevant keywords
|
|
153
|
+
|
|
154
|
+
### CDN Usage
|
|
155
|
+
- Check if images served from CDN (different domain, CDN headers)
|
|
156
|
+
- Recommend CDN for image-heavy sites
|
|
157
|
+
- Check for edge caching headers
|
|
158
|
+
|
|
159
|
+
## Output
|
|
160
|
+
|
|
161
|
+
### Image Audit Summary
|
|
162
|
+
|
|
163
|
+
| Metric | Status | Count |
|
|
164
|
+
|--------|--------|-------|
|
|
165
|
+
| Total Images | - | XX |
|
|
166
|
+
| Missing Alt Text | ❌ | XX |
|
|
167
|
+
| Oversized (>200KB) | ⚠️ | XX |
|
|
168
|
+
| Wrong Format | ⚠️ | XX |
|
|
169
|
+
| No Dimensions | ⚠️ | XX |
|
|
170
|
+
| Not Lazy Loaded | ⚠️ | XX |
|
|
171
|
+
|
|
172
|
+
### Prioritized Optimization List
|
|
173
|
+
|
|
174
|
+
Sorted by file size impact (largest savings first):
|
|
175
|
+
|
|
176
|
+
| Image | Current Size | Format | Issues | Est. Savings |
|
|
177
|
+
|-------|--------------|--------|--------|--------------|
|
|
178
|
+
| ... | ... | ... | ... | ... |
|
|
179
|
+
|
|
180
|
+
### Recommendations
|
|
181
|
+
1. Convert X images to WebP format (est. XX KB savings)
|
|
182
|
+
2. Add alt text to X images
|
|
183
|
+
3. Add dimensions to X images
|
|
184
|
+
4. Enable lazy loading on X below-fold images
|
|
185
|
+
5. Compress X oversized images
|
|
186
|
+
|
|
187
|
+
## Error Handling
|
|
188
|
+
|
|
189
|
+
| Scenario | Action |
|
|
190
|
+
|----------|--------|
|
|
191
|
+
| URL unreachable | Report connection error with status code. Suggest verifying URL and checking if site requires authentication. |
|
|
192
|
+
| No images found on page | Report that no `<img>` elements were detected. Suggest checking if images are loaded via JavaScript or CSS background-image. |
|
|
193
|
+
| Images behind CDN or authentication | Note that image files could not be directly accessed for size analysis. Report available metadata (alt text, dimensions, format from markup) and flag inaccessible resources. |
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-page
|
|
3
|
+
description: >
|
|
4
|
+
Deep single-page SEO analysis covering on-page elements, content quality,
|
|
5
|
+
technical meta tags, schema, images, and performance. Use when user says
|
|
6
|
+
"analyze this page", "check page SEO", or provides a single URL for review.
|
|
7
|
+
risk: unknown
|
|
8
|
+
source: "https://github.com/AgriciDaniel/claude-seo"
|
|
9
|
+
date_added: "2026-03-21"
|
|
10
|
+
user-invokable: true
|
|
11
|
+
argument-hint: "[url]"
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- Read
|
|
14
|
+
- Grep
|
|
15
|
+
- Glob
|
|
16
|
+
- Bash
|
|
17
|
+
- WebFetch
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Single Page Analysis
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
- Use when the user provides a single URL for detailed on-page SEO review.
|
|
25
|
+
- Use when auditing one page rather than an entire site.
|
|
26
|
+
- Use when checking metadata, content, schema, images, and page-level technical signals together.
|
|
27
|
+
|
|
28
|
+
## What to Analyze
|
|
29
|
+
|
|
30
|
+
### On-Page SEO
|
|
31
|
+
- Title tag: 50-60 characters, includes primary keyword, unique
|
|
32
|
+
- Meta description: 150-160 characters, compelling, includes keyword
|
|
33
|
+
- H1: exactly one, matches page intent, includes keyword
|
|
34
|
+
- H2-H6: logical hierarchy (no skipped levels), descriptive
|
|
35
|
+
- URL: short, descriptive, hyphenated, no parameters
|
|
36
|
+
- Internal links: sufficient, relevant anchor text, no orphan pages
|
|
37
|
+
- External links: to authoritative sources, reasonable count
|
|
38
|
+
|
|
39
|
+
### Content Quality
|
|
40
|
+
- Word count vs page type minimums (see quality-gates.md)
|
|
41
|
+
- Readability: Flesch Reading Ease score, grade level
|
|
42
|
+
- Keyword density: natural (1-3%), semantic variations present
|
|
43
|
+
- E-E-A-T signals: author bio, credentials, first-hand experience markers
|
|
44
|
+
- Content freshness: publication date, last updated date
|
|
45
|
+
|
|
46
|
+
### Technical Elements
|
|
47
|
+
- Canonical tag: present, self-referencing or correct
|
|
48
|
+
- Meta robots: index/follow unless intentionally blocked
|
|
49
|
+
- Open Graph: og:title, og:description, og:image, og:url
|
|
50
|
+
- Twitter Card: twitter:card, twitter:title, twitter:description
|
|
51
|
+
- Hreflang: if multi-language, correct implementation
|
|
52
|
+
|
|
53
|
+
### Schema Markup
|
|
54
|
+
- Detect all types (JSON-LD preferred)
|
|
55
|
+
- Validate required properties
|
|
56
|
+
- Identify missing opportunities
|
|
57
|
+
- NEVER recommend HowTo (deprecated) or FAQ (restricted to gov/health)
|
|
58
|
+
|
|
59
|
+
### Images
|
|
60
|
+
- Alt text: present, descriptive, includes keywords where natural
|
|
61
|
+
- File size: flag >200KB (warning), >500KB (critical)
|
|
62
|
+
- Format: recommend WebP/AVIF over JPEG/PNG
|
|
63
|
+
- Dimensions: width/height set for CLS prevention
|
|
64
|
+
- Lazy loading: loading="lazy" on below-fold images
|
|
65
|
+
|
|
66
|
+
### Core Web Vitals (reference only, not measurable from HTML alone)
|
|
67
|
+
- Flag potential LCP issues (huge hero images, render-blocking resources)
|
|
68
|
+
- Flag potential INP issues (heavy JS, no async/defer)
|
|
69
|
+
- Flag potential CLS issues (missing image dimensions, injected content)
|
|
70
|
+
|
|
71
|
+
## Output
|
|
72
|
+
|
|
73
|
+
### Page Score Card
|
|
74
|
+
```
|
|
75
|
+
Overall Score: XX/100
|
|
76
|
+
|
|
77
|
+
On-Page SEO: XX/100 ████████░░
|
|
78
|
+
Content Quality: XX/100 ██████████
|
|
79
|
+
Technical: XX/100 ███████░░░
|
|
80
|
+
Schema: XX/100 █████░░░░░
|
|
81
|
+
Images: XX/100 ████████░░
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Issues Found
|
|
85
|
+
Organized by priority: Critical -> High -> Medium -> Low
|
|
86
|
+
|
|
87
|
+
### Recommendations
|
|
88
|
+
Specific, actionable improvements with expected impact
|
|
89
|
+
|
|
90
|
+
### Schema Suggestions
|
|
91
|
+
Ready-to-use JSON-LD code for detected opportunities
|
|
92
|
+
|
|
93
|
+
## DataForSEO Integration (Optional)
|
|
94
|
+
|
|
95
|
+
If DataForSEO MCP tools are available, use `serp_organic_live_advanced` for real SERP positions and `backlinks_summary` for backlink data and spam scores.
|
|
96
|
+
|
|
97
|
+
## Error Handling
|
|
98
|
+
|
|
99
|
+
| Scenario | Action |
|
|
100
|
+
|----------|--------|
|
|
101
|
+
| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |
|
|
102
|
+
| Page requires authentication (401/403) | Report that the page is behind authentication. Suggest the user provide the rendered HTML directly or a publicly accessible URL. |
|
|
103
|
+
| JavaScript-rendered content (empty body in HTML) | Note that key content may be rendered client-side. Analyze the available HTML and flag that results may be incomplete. Suggest using a browser-rendered snapshot if available. |
|