Initial commit with translated description
This commit is contained in:
130
SKILL.md
Normal file
130
SKILL.md
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
name: SEO (Site Audit + Content Writer + Competitor Analysis)
|
||||||
|
slug: seo
|
||||||
|
version: 1.0.3
|
||||||
|
homepage: https://clawic.com/skills/seo
|
||||||
|
changelog: "Improved name clarity with key capabilities"
|
||||||
|
description: "SEO专家代理,具有网站审计、内容写作、关键词研究、技术修复、链接建设和排名策略。"
|
||||||
|
metadata: {"clawdbot":{"emoji":"🔍","requires":{"bins":[]},"os":["linux","darwin","win32"]}}
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
On first use, read `setup.md` for workspace integration.
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
Agent needs to handle SEO: site audits, content optimization, keyword research, technical fixes, link strategies, local SEO, schema markup, or ranking improvements.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
SEO workspace at `~/seo/`. See `memory-template.md` for setup.
|
||||||
|
|
||||||
|
```
|
||||||
|
~/seo/
|
||||||
|
├── memory.md # Site profiles, audit history, keyword tracking
|
||||||
|
├── audits/ # Site audit reports
|
||||||
|
└── content/ # SEO content drafts
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
| Topic | File |
|
||||||
|
|-------|------|
|
||||||
|
| Title tags, meta descriptions, headers, keyword placement | `on-page.md` |
|
||||||
|
| Core Web Vitals, crawlability, mobile, indexing | `technical.md` |
|
||||||
|
| Search intent, E-E-A-T, content writing | `content.md` |
|
||||||
|
| Google Business, NAP consistency, local keywords | `local.md` |
|
||||||
|
| JSON-LD, Article, LocalBusiness, FAQ, Product schema | `schema.md` |
|
||||||
|
| Internal linking, anchor text, backlink strategies | `links.md` |
|
||||||
|
| Keyword research and competitive analysis | `keywords.md` |
|
||||||
|
|
||||||
|
## Core Rules
|
||||||
|
|
||||||
|
### 1. Audit Before Action
|
||||||
|
Run complete site audit before recommendations. Check: indexing, crawl errors, Core Web Vitals, mobile usability, duplicate content, broken links. No guessing.
|
||||||
|
|
||||||
|
### 2. Search Intent First
|
||||||
|
Match content format to query intent. Informational → guides. Transactional → product pages. Commercial → comparisons. Wrong format = no ranking.
|
||||||
|
|
||||||
|
### 3. Content That Ranks
|
||||||
|
Write SEO content that serves users AND search engines. Answer the query in first 100 words. Cover topic comprehensively. Include LSI keywords naturally. Add FAQ section for People Also Ask.
|
||||||
|
|
||||||
|
### 4. Technical Foundation
|
||||||
|
Core Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1. Mobile-first. HTTPS. Canonical URLs. Clean sitemap. No blocked resources. Technical issues kill rankings.
|
||||||
|
|
||||||
|
### 5. E-E-A-T Signals
|
||||||
|
Experience, Expertise, Authoritativeness, Trustworthiness. Author bios with credentials. About page. External citations. Especially critical for YMYL topics.
|
||||||
|
|
||||||
|
### 6. Link Strategy
|
||||||
|
Internal linking builds topical authority. Anchor text matters. External links to authoritative sources help. Never buy links or participate in schemes.
|
||||||
|
|
||||||
|
### 7. Measure Everything
|
||||||
|
Track rankings, organic traffic, CTR, conversions. Use Search Console data. Iterate based on results, not assumptions.
|
||||||
|
|
||||||
|
## SEO Audit Checklist
|
||||||
|
|
||||||
|
**Indexing:**
|
||||||
|
- [ ] Site indexed in Google (site:domain.com)
|
||||||
|
- [ ] No important pages blocked in robots.txt
|
||||||
|
- [ ] XML sitemap submitted to Search Console
|
||||||
|
- [ ] No noindex on pages that should rank
|
||||||
|
|
||||||
|
**Technical:**
|
||||||
|
- [ ] Core Web Vitals passing
|
||||||
|
- [ ] Mobile-friendly
|
||||||
|
- [ ] HTTPS with no mixed content
|
||||||
|
- [ ] No crawl errors in Search Console
|
||||||
|
- [ ] Clean URL structure
|
||||||
|
|
||||||
|
**On-Page:**
|
||||||
|
- [ ] Unique title tags (50-60 chars)
|
||||||
|
- [ ] Meta descriptions (150-160 chars)
|
||||||
|
- [ ] One H1 per page with keyword
|
||||||
|
- [ ] Proper heading hierarchy
|
||||||
|
- [ ] Images with alt text
|
||||||
|
- [ ] Internal links
|
||||||
|
|
||||||
|
**Content:**
|
||||||
|
- [ ] Search intent matched
|
||||||
|
- [ ] Comprehensive coverage
|
||||||
|
- [ ] No thin content
|
||||||
|
- [ ] No duplicate content
|
||||||
|
- [ ] Fresh and updated
|
||||||
|
|
||||||
|
**Off-Page:**
|
||||||
|
- [ ] Google Business Profile (local)
|
||||||
|
- [ ] Quality backlink profile
|
||||||
|
- [ ] No toxic links
|
||||||
|
|
||||||
|
## Content Writing Process
|
||||||
|
|
||||||
|
1. **Keyword research** — Find target keyword, search volume, difficulty
|
||||||
|
2. **Intent analysis** — What format ranks? What do users want?
|
||||||
|
3. **Outline** — Cover all subtopics competitors cover + more
|
||||||
|
4. **Write** — Answer query fast, be comprehensive, natural keywords
|
||||||
|
5. **Optimize** — Title, meta, headers, internal links, schema
|
||||||
|
6. **Publish** — Submit to Search Console, monitor rankings
|
||||||
|
|
||||||
|
## Common Traps
|
||||||
|
|
||||||
|
- Writing content without checking search intent → won't rank
|
||||||
|
- Ignoring Core Web Vitals → rankings tank
|
||||||
|
- Keyword stuffing → penalties
|
||||||
|
- Duplicate title tags → wasted crawl budget
|
||||||
|
- No internal linking → poor topical authority
|
||||||
|
- Buying links → manual action risk
|
||||||
|
|
||||||
|
## Related Skills
|
||||||
|
Install with `clawhub install <slug>` if user confirms:
|
||||||
|
|
||||||
|
- `content-marketing` — Content strategy
|
||||||
|
- `analytics` — Traffic analysis
|
||||||
|
- `market-research` — Competitive analysis
|
||||||
|
- `html` — HTML optimization
|
||||||
|
- `web` — Web development
|
||||||
|
|
||||||
|
## Feedback
|
||||||
|
|
||||||
|
- If useful: `clawhub star seo`
|
||||||
|
- Stay updated: `clawhub sync`
|
||||||
6
_meta.json
Normal file
6
_meta.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ownerId": "kn73vp5rarc3b14rc7wjcw8f8580t5d1",
|
||||||
|
"slug": "seo",
|
||||||
|
"version": "1.0.3",
|
||||||
|
"publishedAt": 1772021873390
|
||||||
|
}
|
||||||
45
content.md
Normal file
45
content.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Content SEO
|
||||||
|
|
||||||
|
## Search Intent
|
||||||
|
Match content type to query intent — mismatch = no ranking:
|
||||||
|
- **Informational**: "how to", "what is" → guides, tutorials, explanations
|
||||||
|
- **Navigational**: brand + product → homepage, product page
|
||||||
|
- **Transactional**: "buy", "price", "discount" → product/service pages with CTAs
|
||||||
|
- **Commercial investigation**: "best", "vs", "review" → comparison, reviews
|
||||||
|
|
||||||
|
Check intent by searching: what's ranking on page 1? Match that format.
|
||||||
|
|
||||||
|
## E-E-A-T
|
||||||
|
For YMYL (Your Money Your Life) topics — health, finance, legal, safety:
|
||||||
|
- **Experience**: First-hand experience with topic (reviews, case studies)
|
||||||
|
- **Expertise**: Author credentials, byline with bio
|
||||||
|
- **Authoritativeness**: Site reputation, citations from authoritative sources
|
||||||
|
- **Trustworthiness**: Contact info, privacy policy, secure site, accurate content
|
||||||
|
|
||||||
|
E-E-A-T signals:
|
||||||
|
- Author bio with credentials and photo
|
||||||
|
- About page with company history
|
||||||
|
- External links to authoritative sources
|
||||||
|
- Updated date on content
|
||||||
|
- Cite sources for claims
|
||||||
|
|
||||||
|
## Content Quality
|
||||||
|
- Thin content penalty: <300 words with no unique value → noindex or expand
|
||||||
|
- Duplicate content: Google picks one version, others filtered — use canonical
|
||||||
|
- Content depth: cover topic comprehensively, answer related questions
|
||||||
|
- Unique value: what does YOUR content offer that competitors don't?
|
||||||
|
- User engagement: low time-on-page and high bounce signals poor content
|
||||||
|
|
||||||
|
## Freshness
|
||||||
|
- Query Deserves Freshness (QDF): time-sensitive topics need recent content
|
||||||
|
- "Best X 2025" queries: dated content ranks, but must be actually updated
|
||||||
|
- Update dates: changing date without updating content = spam
|
||||||
|
- Evergreen content: no dates in URL, update content periodically
|
||||||
|
- News: requires fast indexing, use Google News sitemap for news sites
|
||||||
|
|
||||||
|
## Content Structure
|
||||||
|
- Answer the query in first 100 words — featured snippet potential
|
||||||
|
- Table of contents for long content — improves UX and may show as sitelinks
|
||||||
|
- FAQ section at bottom — captures "People Also Ask" queries
|
||||||
|
- Bullet points and numbered lists — preferred for featured snippets
|
||||||
|
- Short paragraphs (2-3 sentences) — easier to read, especially mobile
|
||||||
87
keywords.md
Normal file
87
keywords.md
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# Keyword Research & Competitive Analysis
|
||||||
|
|
||||||
|
## Keyword Research Process
|
||||||
|
|
||||||
|
1. **Seed keywords** — Start with obvious terms for the topic
|
||||||
|
2. **Expand** — Find related terms, questions, long-tail variations
|
||||||
|
3. **Analyze** — Check search volume, difficulty, intent
|
||||||
|
4. **Prioritize** — Balance volume, difficulty, and business value
|
||||||
|
5. **Map** — Assign keywords to pages (one primary per page)
|
||||||
|
|
||||||
|
## Keyword Metrics
|
||||||
|
|
||||||
|
| Metric | What It Means | Action |
|
||||||
|
|--------|---------------|--------|
|
||||||
|
| Search volume | Monthly searches | Higher = more potential traffic |
|
||||||
|
| Keyword difficulty | Competition level | Higher = harder to rank |
|
||||||
|
| CPC | Ad cost per click | Higher = more commercial value |
|
||||||
|
| SERP features | Snippets, maps, images | Affects CTR potential |
|
||||||
|
|
||||||
|
## Keyword Types
|
||||||
|
|
||||||
|
**By intent:**
|
||||||
|
- Informational: "how to", "what is", "guide"
|
||||||
|
- Navigational: brand names, specific sites
|
||||||
|
- Transactional: "buy", "price", "discount", "best"
|
||||||
|
- Commercial: "vs", "review", "alternative"
|
||||||
|
|
||||||
|
**By length:**
|
||||||
|
- Head terms: 1-2 words, high volume, high competition
|
||||||
|
- Long-tail: 3+ words, lower volume, easier to rank, higher conversion
|
||||||
|
|
||||||
|
## Competitive Analysis
|
||||||
|
|
||||||
|
### What to Analyze
|
||||||
|
|
||||||
|
1. **Who ranks** — Top 10 for target keywords
|
||||||
|
2. **What they cover** — Topics, subtopics, depth
|
||||||
|
3. **How they structure** — Format, headings, media
|
||||||
|
4. **Where they link** — Internal and external links
|
||||||
|
5. **Why they rank** — Authority, content quality, technical
|
||||||
|
|
||||||
|
### Gap Analysis
|
||||||
|
|
||||||
|
Find opportunities competitors miss:
|
||||||
|
- Topics they don't cover
|
||||||
|
- Questions they don't answer
|
||||||
|
- Formats they don't use (video, tools, calculators)
|
||||||
|
- Depth they lack
|
||||||
|
|
||||||
|
### Content Comparison
|
||||||
|
|
||||||
|
| Factor | Competitor A | Competitor B | Your Content |
|
||||||
|
|--------|--------------|--------------|--------------|
|
||||||
|
| Word count | | | |
|
||||||
|
| Subtopics covered | | | |
|
||||||
|
| Media (images, video) | | | |
|
||||||
|
| Freshness | | | |
|
||||||
|
| E-E-A-T signals | | | |
|
||||||
|
|
||||||
|
## Keyword Mapping
|
||||||
|
|
||||||
|
One primary keyword per page. Related keywords support the primary.
|
||||||
|
|
||||||
|
```
|
||||||
|
/page-url/
|
||||||
|
├── Primary: main target keyword
|
||||||
|
├── Secondary: related keyword 1, related keyword 2
|
||||||
|
└── LSI: semantically related terms
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tracking
|
||||||
|
|
||||||
|
Track rankings over time:
|
||||||
|
- Weekly for competitive terms
|
||||||
|
- Monthly for long-tail
|
||||||
|
- Note algorithm updates that affect rankings
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
|
||||||
|
Free options:
|
||||||
|
- Google Search Console — actual queries driving traffic
|
||||||
|
- Google Trends — relative search interest
|
||||||
|
- Google autocomplete — real user queries
|
||||||
|
- People Also Ask — question-based keywords
|
||||||
|
- Related searches — bottom of SERP
|
||||||
|
|
||||||
|
The skill does keyword research without external tools by analyzing SERPs and using public Google data.
|
||||||
48
links.md
Normal file
48
links.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Links & Authority
|
||||||
|
|
||||||
|
## Internal Linking
|
||||||
|
- Every page should be reachable within 3 clicks from homepage
|
||||||
|
- Use descriptive anchor text — "SEO guide" not "click here"
|
||||||
|
- Link from high-authority pages to important pages — passes PageRank
|
||||||
|
- Contextual links (in content) more valuable than nav/footer links
|
||||||
|
- Fix broken internal links — 404s waste crawl budget
|
||||||
|
- Don't overdo it — 100+ links per page dilutes value
|
||||||
|
|
||||||
|
## Anchor Text
|
||||||
|
- Exact match: "SEO tips" linking to SEO tips page — powerful but risky if overdone
|
||||||
|
- Partial match: "learn about SEO strategies" — safer, still relevant
|
||||||
|
- Branded: "Google's guide" — natural, builds brand
|
||||||
|
- Naked URL: "https://example.com" — looks natural in some contexts
|
||||||
|
- Generic: "click here", "read more" — wastes link opportunity
|
||||||
|
|
||||||
|
Mix of anchor text types looks natural. All exact match = penalty risk.
|
||||||
|
|
||||||
|
## Backlinks
|
||||||
|
- Quality > quantity — one link from NYT > 100 from random blogs
|
||||||
|
- Relevance matters — link from SEO blog > link from cooking blog (for SEO site)
|
||||||
|
- Domain authority (DA/DR) — higher = more valuable, but not everything
|
||||||
|
- Follow vs nofollow — follow passes PageRank, nofollow doesn't (but still has value)
|
||||||
|
- Link placement — in-content links > sidebar > footer
|
||||||
|
|
||||||
|
## Link Building (White Hat)
|
||||||
|
- Create linkable assets — tools, research, original data, infographics
|
||||||
|
- Guest posting — write for relevant blogs, include contextual link
|
||||||
|
- HARO (Help a Reporter Out) — journalist queries, get press links
|
||||||
|
- Broken link building — find broken links, offer your content as replacement
|
||||||
|
- Resource page outreach — get listed on "best resources" pages
|
||||||
|
- Digital PR — newsworthy content that journalists want to cover
|
||||||
|
|
||||||
|
## Link Penalties
|
||||||
|
- Buying links — Google detects payment patterns, manual actions
|
||||||
|
- Link exchanges — "I'll link you if you link me" at scale
|
||||||
|
- PBNs (Private Blog Networks) — footprints get detected
|
||||||
|
- Excessive reciprocal links — some OK, pattern-based penalized
|
||||||
|
- Low-quality directories — mass directory submission is outdated
|
||||||
|
- Comment/forum spam — nofollow anyway, plus looks desperate
|
||||||
|
|
||||||
|
## Disavow
|
||||||
|
- Use only when you can't remove bad links manually
|
||||||
|
- Upload disavow file in Search Console
|
||||||
|
- Disavow at domain level for spammy sites: `domain:spamsite.com`
|
||||||
|
- Don't disavow links you didn't build — Google ignores most bad links automatically
|
||||||
|
- Takes weeks to months to see effect
|
||||||
43
local.md
Normal file
43
local.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Local SEO
|
||||||
|
|
||||||
|
## Google Business Profile
|
||||||
|
- Claim and verify your listing — unverified profiles don't rank
|
||||||
|
- Complete ALL fields: hours, services, attributes, products
|
||||||
|
- Primary category: choose the most specific match (not generic "Business")
|
||||||
|
- Photos: businesses with photos get 42% more direction requests
|
||||||
|
- Posts: weekly updates show activity, appear in Knowledge Panel
|
||||||
|
- Q&A: seed with common questions, monitor for spam
|
||||||
|
|
||||||
|
## NAP Consistency
|
||||||
|
- NAP = Name, Address, Phone — must be IDENTICAL everywhere
|
||||||
|
- Format matters: "Street" vs "St." is a mismatch to Google
|
||||||
|
- Check major directories: Yelp, Yellow Pages, Facebook, Apple Maps, Bing Places
|
||||||
|
- Use local phone number — toll-free looks non-local
|
||||||
|
- Update NAP when moving — inconsistency tanks rankings for months
|
||||||
|
|
||||||
|
## Local Keywords
|
||||||
|
- "[Service] + [City]" pages for each location served
|
||||||
|
- "near me" queries: proximity + relevance + prominence
|
||||||
|
- Neighborhood/district names for dense metros
|
||||||
|
- Location in title tag: "Plumber in Austin, TX | Company Name"
|
||||||
|
- Service area pages: one per city, unique content each
|
||||||
|
|
||||||
|
## Reviews
|
||||||
|
- Quantity + recency + rating: all three matter for local pack
|
||||||
|
- Respond to ALL reviews — especially negative, shows engagement
|
||||||
|
- Never buy fake reviews — Google detects patterns, leads to suspension
|
||||||
|
- Review velocity: steady flow better than sudden burst
|
||||||
|
- Ask at point of transaction — "leave a review" links in receipts/emails
|
||||||
|
|
||||||
|
## Citations
|
||||||
|
- Structured citations: business directories with NAP
|
||||||
|
- Unstructured citations: mentions in articles, blogs, news
|
||||||
|
- Industry-specific directories: lawyers on Avvo, restaurants on TripAdvisor
|
||||||
|
- Chamber of commerce and local business associations
|
||||||
|
- Data aggregators (Factual, Localeze) push to multiple directories
|
||||||
|
|
||||||
|
## Local Content
|
||||||
|
- Location pages with unique content — not just NAP + map
|
||||||
|
- Local news/events coverage — shows community involvement
|
||||||
|
- Case studies with local clients — builds local relevance signals
|
||||||
|
- Embed Google Maps — helps Google verify location
|
||||||
84
memory-template.md
Normal file
84
memory-template.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Memory Template — SEO
|
||||||
|
|
||||||
|
## ~/seo/memory.md
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# SEO Memory
|
||||||
|
|
||||||
|
## Status
|
||||||
|
- Last audit: [date]
|
||||||
|
- Active sites: [count]
|
||||||
|
- Keywords tracked: [count]
|
||||||
|
|
||||||
|
## Sites
|
||||||
|
|
||||||
|
### [site-name]
|
||||||
|
- Domain: example.com
|
||||||
|
- Type: e-commerce / blog / saas / local
|
||||||
|
- Last audit: [date]
|
||||||
|
- Priority issues: [list]
|
||||||
|
- Notes: [context]
|
||||||
|
|
||||||
|
## Keyword Tracking
|
||||||
|
|
||||||
|
| Keyword | Site | Current | Target | Trend | Last Checked |
|
||||||
|
|---------|------|---------|--------|-------|--------------|
|
||||||
|
| [keyword] | [site] | [rank] | [goal] | ↑/↓/→ | [date] |
|
||||||
|
|
||||||
|
## Audit History
|
||||||
|
|
||||||
|
### [date] — [site]
|
||||||
|
- Issues found: [count]
|
||||||
|
- Critical: [list]
|
||||||
|
- Fixed: [list]
|
||||||
|
- Pending: [list]
|
||||||
|
|
||||||
|
## Content Pipeline
|
||||||
|
|
||||||
|
| Title | Target Keyword | Status | Published |
|
||||||
|
|-------|----------------|--------|-----------|
|
||||||
|
| [title] | [keyword] | draft/review/live | [date/url] |
|
||||||
|
|
||||||
|
## Backlink Opportunities
|
||||||
|
|
||||||
|
| Site | DA | Status | Notes |
|
||||||
|
|------|----|---------| ------|
|
||||||
|
| [domain] | [score] | contacted/pending/secured | [context] |
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
[Learnings, patterns, site-specific context]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Audit Report Template
|
||||||
|
|
||||||
|
Save audit reports to `~/seo/audits/[site]-[date].md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# SEO Audit — [site] — [date]
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
- Overall health: [score]/100
|
||||||
|
- Critical issues: [count]
|
||||||
|
- Warnings: [count]
|
||||||
|
- Passed: [count]
|
||||||
|
|
||||||
|
## Critical Issues
|
||||||
|
1. [Issue] — [impact] — [fix]
|
||||||
|
|
||||||
|
## Warnings
|
||||||
|
1. [Issue] — [recommendation]
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
1. [Priority action]
|
||||||
|
2. [Next action]
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
- Core Web Vitals: LCP [x]s, INP [x]ms, CLS [x]
|
||||||
|
- Mobile: [pass/fail]
|
||||||
|
- Indexing: [x] pages indexed
|
||||||
|
- Crawl errors: [count]
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
1. [Action item with deadline]
|
||||||
|
```
|
||||||
43
on-page.md
Normal file
43
on-page.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# On-Page SEO Traps
|
||||||
|
|
||||||
|
## Title Tag
|
||||||
|
- 50-60 chars MAX — Google truncates at ~60, shows "..." which hurts CTR
|
||||||
|
- Primary keyword in first 30 chars — attention drops after that
|
||||||
|
- NEVER repeat same keyword twice in title — looks spammy
|
||||||
|
- Brand name at END, not start — unless brand is the search term
|
||||||
|
- Pipe `|` or dash `-` as separator — avoid colons, look like error messages
|
||||||
|
|
||||||
|
## Meta Description
|
||||||
|
- 150-160 chars — longer gets truncated, shorter wastes space
|
||||||
|
- Google often rewrites it — but well-written ones used ~70% of time
|
||||||
|
- Include primary keyword — gets bolded in search results
|
||||||
|
- Call-to-action works: "Learn how...", "Discover...", "Get started..."
|
||||||
|
- NEVER duplicate across pages — Google may show "no description available"
|
||||||
|
|
||||||
|
## Headers
|
||||||
|
- ONE H1 per page — multiple H1s confuse hierarchy
|
||||||
|
- H1 ≠ Title tag — related but different, doubles keyword opportunities
|
||||||
|
- H2s for main sections, H3s for subsections — hierarchy matters for featured snippets
|
||||||
|
- Keyword variations in H2s — don't repeat exact primary keyword
|
||||||
|
- NEVER use H1 for logo or nav — semantic misuse
|
||||||
|
|
||||||
|
## Keywords
|
||||||
|
- Primary keyword in: title, H1, first 100 words, URL, meta description
|
||||||
|
- Density under 3% — modern Google detects stuffing patterns
|
||||||
|
- LSI keywords (related terms) — signals topic depth, not just single keyword
|
||||||
|
- Long-tail in H2/H3 — captures "how to..." and question queries
|
||||||
|
|
||||||
|
## Images
|
||||||
|
- Alt text describes image — "Golden retriever playing fetch" not "dog"
|
||||||
|
- Keyword in alt only if natural — forced keywords get penalized
|
||||||
|
- File names with hyphens: `email-marketing-tips.jpg` not `IMG_4532.jpg`
|
||||||
|
- Compress under 100KB — larger images kill page speed
|
||||||
|
- WebP format: 25-35% smaller than JPEG at same quality
|
||||||
|
- Lazy loading for below-fold images — improves LCP
|
||||||
|
|
||||||
|
## URLs
|
||||||
|
- Short, descriptive, lowercase: `/seo-guide/` not `/page?id=123`
|
||||||
|
- Hyphens between words: `/email-marketing/` not `/emailmarketing/`
|
||||||
|
- No dates unless content is time-sensitive — allows evergreen updates
|
||||||
|
- No stop words unless needed for clarity — "how-to-seo" not "how-to-do-seo"
|
||||||
|
- NEVER change URLs without 301 redirect — breaks links, loses authority
|
||||||
81
schema.md
Normal file
81
schema.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Structured Data (Schema Markup)
|
||||||
|
|
||||||
|
## Basics
|
||||||
|
- JSON-LD format preferred — script tag in head, cleanest implementation
|
||||||
|
- Test with Rich Results Test — not all schema triggers rich results
|
||||||
|
- Test with Schema Validator (schema.org) — catches syntax errors
|
||||||
|
- Required vs recommended properties — missing required = invalid
|
||||||
|
- One schema type per thing — don't mark same content as Article AND BlogPosting
|
||||||
|
|
||||||
|
## Common Schema Types
|
||||||
|
|
||||||
|
### Article / BlogPosting
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@type": "Article",
|
||||||
|
"headline": "...",
|
||||||
|
"author": {"@type": "Person", "name": "..."},
|
||||||
|
"datePublished": "2025-01-15",
|
||||||
|
"dateModified": "2025-01-20",
|
||||||
|
"image": "..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- `datePublished` required — omitting it loses rich result eligibility
|
||||||
|
- `dateModified` shows in search when different from published
|
||||||
|
- `image` recommended for better visual in search results
|
||||||
|
|
||||||
|
### LocalBusiness
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@type": "LocalBusiness",
|
||||||
|
"name": "...",
|
||||||
|
"address": {"@type": "PostalAddress", ...},
|
||||||
|
"telephone": "...",
|
||||||
|
"openingHoursSpecification": [...]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- Use specific subtype: `Restaurant`, `Dentist`, `LegalService`
|
||||||
|
- `geo` coordinates help Google verify location
|
||||||
|
- `priceRange` shows in Knowledge Panel
|
||||||
|
|
||||||
|
### FAQ
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@type": "FAQPage",
|
||||||
|
"mainEntity": [
|
||||||
|
{"@type": "Question", "name": "...", "acceptedAnswer": {...}}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- FAQ schema shows expandable Q&A in search results — HUGE CTR boost
|
||||||
|
- Content must be visible on page — hidden FAQ = spam
|
||||||
|
- Max ~10 questions typically shown
|
||||||
|
|
||||||
|
### Product
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@type": "Product",
|
||||||
|
"name": "...",
|
||||||
|
"offers": {"@type": "Offer", "price": "...", "priceCurrency": "USD"},
|
||||||
|
"aggregateRating": {...}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- `offers` required for price in search results
|
||||||
|
- `aggregateRating` shows stars — needs actual review data
|
||||||
|
- `availability` (InStock, OutOfStock) shows availability badge
|
||||||
|
|
||||||
|
### HowTo
|
||||||
|
- Step-by-step instructions with images
|
||||||
|
- Can show as rich result with step previews
|
||||||
|
- Each step needs `text`, optionally `image`
|
||||||
|
|
||||||
|
### Review
|
||||||
|
- Individual review with `reviewRating`
|
||||||
|
- Self-serving reviews (reviewing own business) = spam
|
||||||
|
|
||||||
|
## Traps
|
||||||
|
- Marking invisible content — schema must match visible page content
|
||||||
|
- Fake reviews/ratings — Google detects and penalizes
|
||||||
|
- Schema for content that doesn't exist — "Product" on info page
|
||||||
|
- Mixing incompatible types — Article + Product on same page
|
||||||
|
- Not updating `dateModified` when content changes
|
||||||
43
setup.md
Normal file
43
setup.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Setup — SEO
|
||||||
|
|
||||||
|
## First Use
|
||||||
|
|
||||||
|
This skill works immediately with no setup required.
|
||||||
|
|
||||||
|
## Workspace Integration
|
||||||
|
|
||||||
|
For persistent tracking across sessions, create workspace:
|
||||||
|
|
||||||
|
```
|
||||||
|
mkdir -p ~/seo/audits ~/seo/content
|
||||||
|
```
|
||||||
|
|
||||||
|
Register in your main memory file:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## SEO Workspace
|
||||||
|
Location: ~/seo/
|
||||||
|
- Audit reports: ~/seo/audits/
|
||||||
|
- Content drafts: ~/seo/content/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optional Configuration
|
||||||
|
|
||||||
|
Track specific sites in `~/seo/memory.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# SEO Memory
|
||||||
|
|
||||||
|
## Sites
|
||||||
|
- example.com — Main project, e-commerce
|
||||||
|
- blog.example.com — Content hub
|
||||||
|
|
||||||
|
## Keyword Tracking
|
||||||
|
| Keyword | Current Rank | Target | Last Checked |
|
||||||
|
|---------|--------------|--------|--------------|
|
||||||
|
| best widgets | 12 | 3 | 2025-01-15 |
|
||||||
|
```
|
||||||
|
|
||||||
|
## No Setup Required
|
||||||
|
|
||||||
|
The skill provides complete SEO guidance without any configuration. Workspace setup is optional for users who want to track multiple sites or audit history.
|
||||||
43
technical.md
Normal file
43
technical.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Technical SEO
|
||||||
|
|
||||||
|
## Core Web Vitals
|
||||||
|
- **LCP** (Largest Contentful Paint): < 2.5s — largest visible element load time
|
||||||
|
- **INP** (Interaction to Next Paint): < 200ms — response to user interaction
|
||||||
|
- **CLS** (Cumulative Layout Shift): < 0.1 — visual stability, no jumping content
|
||||||
|
- Test with PageSpeed Insights — field data from real users matters more than lab
|
||||||
|
- Poor CWV = ranking demotion in competitive queries
|
||||||
|
|
||||||
|
## Crawlability
|
||||||
|
- robots.txt: `Disallow: /admin/` blocks crawlers — check with `robots.txt Tester` in GSC
|
||||||
|
- NEVER block CSS/JS in robots.txt — Google needs them to render JavaScript
|
||||||
|
- Crawl budget: large sites (>10K pages) must prioritize important pages
|
||||||
|
- Orphan pages (no internal links) won't get crawled regularly
|
||||||
|
- XML sitemap: max 50K URLs or 50MB per file, link in robots.txt
|
||||||
|
|
||||||
|
## Indexing
|
||||||
|
- `noindex` meta tag: prevents indexing but wastes crawl budget
|
||||||
|
- `canonical` URL: self-referencing on all pages, cross-domain for syndicated content
|
||||||
|
- Parameter URLs (`?sort=price`) need canonical to main version
|
||||||
|
- Pagination: use rel="next"/"prev" or canonical to page 1, depending on content
|
||||||
|
- Check indexing in GSC: URL Inspection tool shows render and index status
|
||||||
|
|
||||||
|
## Mobile
|
||||||
|
- Mobile-first indexing: Google indexes mobile version, desktop secondary
|
||||||
|
- Viewport meta tag required: `<meta name="viewport" content="width=device-width, initial-scale=1">`
|
||||||
|
- Touch targets minimum 48x48px — failing this hurts mobile usability score
|
||||||
|
- No intrusive interstitials — popups that block content get demoted
|
||||||
|
- Test with Mobile-Friendly Test — failing blocks ranking in mobile search
|
||||||
|
|
||||||
|
## HTTPS
|
||||||
|
- Required for rankings — HTTP sites show "Not Secure" warning
|
||||||
|
- Mixed content (HTTP resources on HTTPS page) breaks padlock
|
||||||
|
- HSTS header: tells browsers to always use HTTPS
|
||||||
|
- After migration: 301 redirect all HTTP to HTTPS, update canonical URLs
|
||||||
|
|
||||||
|
## Speed
|
||||||
|
- TTFB < 200ms — server response time, hosting matters
|
||||||
|
- Render-blocking CSS: inline critical CSS, defer rest
|
||||||
|
- JavaScript: async/defer attributes, avoid blocking main thread
|
||||||
|
- Images: lazy load, responsive srcset, modern formats (WebP/AVIF)
|
||||||
|
- Fonts: font-display: swap prevents invisible text during load
|
||||||
|
- CDN for static assets — reduces latency globally
|
||||||
Reference in New Issue
Block a user