commit 82d07894d8b6ad24373c1c904bfc181e884316f2 Author: zlei9 Date: Sun Mar 29 10:14:30 2026 +0800 Initial commit with translated description diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..66f72b9 --- /dev/null +++ b/SKILL.md @@ -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 ` 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` diff --git a/_meta.json b/_meta.json new file mode 100644 index 0000000..7529d79 --- /dev/null +++ b/_meta.json @@ -0,0 +1,6 @@ +{ + "ownerId": "kn73vp5rarc3b14rc7wjcw8f8580t5d1", + "slug": "seo", + "version": "1.0.3", + "publishedAt": 1772021873390 +} \ No newline at end of file diff --git a/content.md b/content.md new file mode 100644 index 0000000..630fed6 --- /dev/null +++ b/content.md @@ -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 diff --git a/keywords.md b/keywords.md new file mode 100644 index 0000000..210056b --- /dev/null +++ b/keywords.md @@ -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. diff --git a/links.md b/links.md new file mode 100644 index 0000000..2949d74 --- /dev/null +++ b/links.md @@ -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 diff --git a/local.md b/local.md new file mode 100644 index 0000000..d85e60c --- /dev/null +++ b/local.md @@ -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 diff --git a/memory-template.md b/memory-template.md new file mode 100644 index 0000000..ec412fb --- /dev/null +++ b/memory-template.md @@ -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] +``` diff --git a/on-page.md b/on-page.md new file mode 100644 index 0000000..4a172bc --- /dev/null +++ b/on-page.md @@ -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 diff --git a/schema.md b/schema.md new file mode 100644 index 0000000..db938e8 --- /dev/null +++ b/schema.md @@ -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 diff --git a/setup.md b/setup.md new file mode 100644 index 0000000..985716f --- /dev/null +++ b/setup.md @@ -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. diff --git a/technical.md b/technical.md new file mode 100644 index 0000000..9606adb --- /dev/null +++ b/technical.md @@ -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: `` +- 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