When to use
Use this when you need to know why a page or site underperforms in search and what to fix first, covering the four layers that move rankings: keywords, on-page, content, and technical.
Not for: writing the optimized content itself (use mkt-draft-content), paid search/SEM, or claims that require live crawl or analytics data you do not have — mark those as unverifiable.
Method
- Set scope and intent. Confirm the URL(s), audience, and primary search intent (informational, commercial, navigational, transactional). Decision point: if intent is unknown, infer from the content and state it.
- Keywords. Identify the primary keyword, secondary and long-tail variants, and intent match. Flag cannibalization or missing target terms.
- On-page. Check title tag, meta description, H1 and heading hierarchy, keyword placement, internal links, image alt text, URL structure, and readability.
- Content gaps. Compare coverage against ranking pages; find missing subtopics, thin sections, outdated facts, and schema/FAQ opportunities.
- Technical. Review indexability (robots, canonical, sitemap), speed signals, mobile-friendliness, structured data, and broken links — at the level the available data allows. Decision point: mark what needs a live crawl to confirm.
- Prioritize. Score each finding by impact and effort, then order the fixes with quick wins flagged.
Example
Page targets "expense management software" but the H1 says "Welcome." On-page: no keyword in title, meta description missing, one H2. Content gap: ranking rivals all cover "integrations" and "pricing" — this page covers neither. Fix order: (1) rewrite title + H1 with keyword (high impact, low effort), (2) add meta description, (3) add integrations + pricing sections. Technical: canonical looks correct but needs a live crawl to confirm indexing.
Pitfalls
- Chasing technical minutiae while the page targets the wrong keyword or intent.
- Recommending fixes without impact/effort scoring, so everything looks equally urgent.
- Asserting technical findings (index status, speed) that actually require a live crawl — label them.
- Optimizing for a keyword whose intent does not match the page's purpose.
Output format
Scope + target keyword + search intent: <...>
Findings by layer:
- Keywords: <short list>
- On-page: <short list>
- Content gaps: <short list>
- Technical: <short list>
Issue table:
| Area | Issue | Impact (H/M/L) | Effort (H/M/L) | Fix |
Prioritized action plan: <top items first, quick wins flagged>
Unverifiable without live crawl / analytics: <...>
Reference
Audit workflow (run in this order)
- Crawl the site (Screaming Frog / Sitebulb) for status codes, titles, canonicals, redirects.
- Pull Google Search Console: top queries, pages, CTR, coverage/indexing errors.
- Run PageSpeed Insights on the 3 templates (home, a product/feature page, a blog post) — not all 20 pages; templates repeat.
- Check
site:domain.com and branded queries for what's actually indexed.
P0 catastrophic checks (an audit that skips these can pass a broken site)
- JS rendering: compare rendered vs raw HTML (GSC URL Inspection "view crawled page"). SaaS sites on React/Next/Webflow often serve content only after JS — Google may see an empty
<div>. This invalidates every downstream finding.
- Accidental noindex / robots block on production pages.
- Staging/dev subdomain leak:
site:staging. / site:dev. — non-prod environments getting indexed (add noindex + auth).
Core Web Vitals thresholds (good)
LCP < 2.5s · INP < 200ms · CLS < 0.1 · TTFB < 0.8s. Report each as good / needs-improvement / poor per template.
On-page patterns
- Title:
Primary Keyword | Benefit — Brand (≤ ~60 chars). Meta description ≤ ~155 chars with the keyword + a CTA.
- One H1 per page, keyword-bearing. Anti-pattern: generic H1s like "Welcome" or "Simple plans for everyone" that carry no query.
- Add OpenGraph + Twitter card tags (CTR in social/SERP snippets).
- SaaS-specific: build comparison / "vs" / alternatives pages — highest commercial-intent pipeline lever.
Prioritization quadrant
Score each fix Impact (H/M/L) × Effort (H/M/L):
- High-impact / low-effort → do now (quick wins).
- High-impact / high-effort → plan (e.g. rendering fixes, content builds).
- Low-impact → backlog. Backlinks are the longest-lead-time lever — start early even though results lag.
1---2name: mkt-seo-audit3description: Audit a page or site across keywords, on-page, content gaps, and technical health, then return a prioritized impact/effort action list.4---56## When to use78Use this when you need to know why a page or site underperforms in search and what to fix first, covering the four layers that move rankings: keywords, on-page, content, and technical.910**Not for:** writing the optimized content itself (use mkt-draft-content), paid search/SEM, or claims that require live crawl or analytics data you do not have — mark those as unverifiable.1112## Method13141. Set scope and intent. Confirm the URL(s), audience, and primary search intent (informational, commercial, navigational, transactional). Decision point: if intent is unknown, infer from the content and state it.152. Keywords. Identify the primary keyword, secondary and long-tail variants, and intent match. Flag cannibalization or missing target terms.163. On-page. Check title tag, meta description, H1 and heading hierarchy, keyword placement, internal links, image alt text, URL structure, and readability.174. Content gaps. Compare coverage against ranking pages; find missing subtopics, thin sections, outdated facts, and schema/FAQ opportunities.185. Technical. Review indexability (robots, canonical, sitemap), speed signals, mobile-friendliness, structured data, and broken links — at the level the available data allows. Decision point: mark what needs a live crawl to confirm.196. Prioritize. Score each finding by impact and effort, then order the fixes with quick wins flagged.2021## Example2223Page targets "expense management software" but the H1 says "Welcome." On-page: no keyword in title, meta description missing, one H2. Content gap: ranking rivals all cover "integrations" and "pricing" — this page covers neither. Fix order: (1) rewrite title + H1 with keyword (high impact, low effort), (2) add meta description, (3) add integrations + pricing sections. Technical: canonical looks correct but needs a live crawl to confirm indexing.2425## Pitfalls2627- Chasing technical minutiae while the page targets the wrong keyword or intent.28- Recommending fixes without impact/effort scoring, so everything looks equally urgent.29- Asserting technical findings (index status, speed) that actually require a live crawl — label them.30- Optimizing for a keyword whose intent does not match the page's purpose.3132## Output format3334```35Scope + target keyword + search intent: <...>3637Findings by layer:38- Keywords: <short list>39- On-page: <short list>40- Content gaps: <short list>41- Technical: <short list>4243Issue table:44| Area | Issue | Impact (H/M/L) | Effort (H/M/L) | Fix |4546Prioritized action plan: <top items first, quick wins flagged>47Unverifiable without live crawl / analytics: <...>48```4950## Reference5152### Audit workflow (run in this order)531. Crawl the site (Screaming Frog / Sitebulb) for status codes, titles, canonicals, redirects.542. Pull Google Search Console: top queries, pages, CTR, coverage/indexing errors.553. Run PageSpeed Insights on the **3 templates** (home, a product/feature page, a blog post) — not all 20 pages; templates repeat.564. Check `site:domain.com` and branded queries for what's actually indexed.5758### P0 catastrophic checks (an audit that skips these can pass a broken site)59- **JS rendering:** compare rendered vs raw HTML (GSC URL Inspection "view crawled page"). SaaS sites on React/Next/Webflow often serve content only after JS — Google may see an empty `<div>`. This invalidates every downstream finding.60- **Accidental noindex / robots block** on production pages.61- **Staging/dev subdomain leak:** `site:staging.` / `site:dev.` — non-prod environments getting indexed (add noindex + auth).6263### Core Web Vitals thresholds (good)64LCP < 2.5s · INP < 200ms · CLS < 0.1 · TTFB < 0.8s. Report each as good / needs-improvement / poor per template.6566### On-page patterns67- Title: `Primary Keyword | Benefit — Brand` (≤ ~60 chars). Meta description ≤ ~155 chars with the keyword + a CTA.68- One H1 per page, keyword-bearing. **Anti-pattern:** generic H1s like "Welcome" or "Simple plans for everyone" that carry no query.69- Add OpenGraph + Twitter card tags (CTR in social/SERP snippets).70- SaaS-specific: build comparison / "vs" / alternatives pages — highest commercial-intent pipeline lever.7172### Prioritization quadrant73Score each fix Impact (H/M/L) × Effort (H/M/L):74- High-impact / low-effort → **do now** (quick wins).75- High-impact / high-effort → **plan** (e.g. rendering fixes, content builds).76- Low-impact → backlog. **Backlinks** are the longest-lead-time lever — start early even though results lag.