suede-seo-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited suede-seo-audit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill goes deeper than an inline copy audit. It inspects live page source, validates schema, traces crawl access, checks AI EO signals, and produces exact rewrites with a lane-by-lane grade. Use suede-copy for writing new copy. Use this skill when the audit itself is the deliverable.
Do not audit from memory. Before writing a single finding, verify the live surface.
robots.txt: is the path allowed? Is Disallow: / blocking indexers?<meta name="robots"> or <meta name="googlebot">: noindex? nofollow?<link rel="canonical">: does it match the intended URL exactly?<title> tag: exact text, character count<meta name="description">: exact text, character counttwitter:image
<script type="application/ld+json"> block present?If the URL is inaccessible, note that and audit from source files with caveats. If the page is behind auth or a paywall, say so and limit the audit to what is accessible.
Run all lanes. Score each A-F at the end. State explicitly when a check was skipped and why.
Activate when keyword discovery is requested; skip for technical-only or copy-only audits.
Goal: produce a keyword brief and content brief the page can be built or optimized around.
intent precisely. Classify as informational, navigational, commercial, or transactional. Classify volume by inference from query specificity and topic breadth: head terms like "music distribution" are high (>10K/mo); long-tail phrases like "how to register a song copyright with SoundExchange" are low (<1K/mo). Classify difficulty by competition density: head terms with Wikipedia/major-brand dominance are high; niche product terms are low. Agents must classify both. Do not skip.
Related but not synonymous with the primary keyword.
that should appear naturally in the content. Group by subtopic.
inferred from the niche, fetch the page and compare H2/H3 structure. For each competitor:
a. List the H2/H3 headings the competitor covers that the target page does not. b. Identify the queries those sections are likely targeting. c. Classify each gap as: CRITICAL (directly on primary keyword intent), IMPORTANT (secondary keyword), or INFORMATIONAL (supporting LSI term).
Output:
Competitor: [URL]
Gap topic: [H2/H3 text from competitor] — [query it targets] — [CRITICAL|IMPORTANT|INFORMATIONAL]
Missing section recommended: [exact H2 to add] — [brief rationale]If no competitor URL is provided and none is inferable, name 2–3 queries competitor pages likely rank for that the target page does not address, derived from the keyword set and topic structure.
for? Options: Featured snippet, People Also Ask, Image pack, Video carousel, Knowledge panel, Local pack, Site links. For each feature named, state the eligibility reason.
Content brief: generate when Lane 0 is active and a page is being built or significantly revised:
| Field | Guidance |
|---|---|
| Target word count | Informational: 1,200–2,500 words. Commercial: 800–1,500 words. Transactional: 400–800 words. Match top 3 SERP competitors if estimable from URL structure. |
| Required H2 sections | Pull from People Also Ask for the primary keyword + competitor H2/H3 structure. List every sub-topic the page must cover to match SERP depth. |
| Schema type | State the exact @type value required (see Lane 5). |
| Internal links to include | Name anchor text + destination for at least 2 existing site pages the new content must link to. |
| External links to include | Name 1–3 authoritative sources (Wikipedia, official docs, standards body, peer-reviewed source) relevant to the primary keyword. |
| NLP term density targets | Primary: in H1, in first 100 words, 2–4 additional times per 1,000 words. Each secondary keyword: 1–2 times per 1,000 words. Flag if current content misses these targets. |
Output keyword brief (output content brief inline before this block when generated):
Primary: [keyword] — [intent: info/nav/commercial/transactional] — [volume: low <1K/mo | medium 1K–10K | high >10K/mo] — [difficulty: low | medium | high]
Secondary: [k1 — intent — volume], [k2 — intent — volume], [k3 — intent — volume]
LSI terms: [list — grouped by subtopic]
Competitor gap queries: [query — competitor URL that ranks — content angle missing from target page]
SERP feature targets: [feature — eligibility reason]
Content brief: primary keyword appears in H1 + first 100 words + [N] times per 1,000 words; secondary keywords appear [1–2] times eachLane 0 is informational only. It produces a brief, not a grade. Incorporate the brief into Lanes 2–7 findings where relevant.
Goal: confirm that crawlers, indexers, and AI scrapers can reach, parse, and attribute the page.
Checklist:
robots.txt allows the path for *, Googlebot, and GPTBot<meta name="robots"> is absent or set to index, follow<lastmod> datecurl -A "Googlebot" output or view-source)
#### Core Web Vitals (risk factor only — not gradeable via curl)
curl measures server response time, not browser rendering. Actual CWV requires Lighthouse CI or PageSpeed Insights API.
Instead, check these risk factors (low/medium/high):
Report as: CWV Risk: low / medium / high — do NOT include in A-F grade.
Lane 1 grade drops to C or below if: any indexability block is present, if the canonical is wrong, or if the page is JavaScript-only with no SSR/SSG fallback.
Goal: confirm the page has a single coherent intent that matches real queries and can earn a featured snippet or AI citation.
Checklist:
register a music release")
if asked about this page's subject. Format: "[Entity] is [what it does] for [who] by [how]. It [primary differentiator]." If this definition cannot be constructed from the first 200 words of the page, that is a HIGH finding.
repo, contact)
the same site targeting the same primary term? If yes, flag which URL should be the canonical topic owner
Lane 2 grade drops to C or below if: the page has no clear primary reader, if the intent conflicts with the title, or if the first screen answers a different question than the URL implies.
Goal: every metadata field is populated, within safe limits, and tuned for click-through from search results and social previews.
Checklist:
Title tag
| or — (not an em dash in tag value)Meta description
Open Graph
website, article, or appropriate typeTwitter/X card
summary_large_image for pages with a hero imageappropriate
Other
filename)
visible copy)
title, description, and H1; at least one each
Lane 3 grade drops to D or below if: title is over 70 characters and truncates the entity name, meta description is missing, og:image is missing, or any entity name is absent from all three (title + description + H1).
Goal: the page's heading hierarchy, section order, internal link network, and FAQ placement serve both human readers and AI citation engines.
Checklist:
Headings
Section order
Links
site
that would compete
FAQ
the question)
Keyword density
title tag (required), meta description (recommended), and 2–4 additional times per 1,000 words of body content
(invisible to search), not more than 3 (triggers keyword stuffing signals)
containing the keyword must make grammatical and editorial sense without it
one section
Density check output format:
Primary "[keyword]": H1 ✓/✗ | first 100 words ✓/✗ | body density [N per 1,000 words] (target: 2–4) | status: OK | THIN | OVER
Secondary "[keyword]": [N per 1,000 words] (target: 1–2) | status: OK | MISSING | OVERLane 4 grade drops to C or below if: H1 is missing, section order puts the FAQ or proof below the fold without any in-page anchor, or internal links use non-descriptive anchor text throughout. Lane 4 drops an additional letter grade if primary keyword density is 0 in the body or any secondary keyword is completely absent from the page.
Goal: every JSON-LD block is valid, typed correctly for the page, and matches visible content.
Checklist:
<script type="application/ld+json"> block presentFAQPageArticle or BlogPostingSoftwareApplication or ProductTechArticle or WebPageOrganizationBreadcrumbListOrganization schema includes: name, url, logo, sameAs (GitHub,LinkedIn, App Store, or other authoritative profiles)
SoftwareApplication schema includes: name, applicationCategory,operatingSystem, offers (even if free; use price: "0")
Article schema includes: headline, author, datePublished,dateModified
When schema is missing or broken, provide the exact corrected JSON-LD block inline in the findings. Do not describe it in prose.
Example minimum Organization block:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Suede",
"url": "https://suedeai.ai",
"logo": "https://suedeai.ai/logo.png",
"sameAs": [
"https://github.com/Suede-AI",
"https://www.linkedin.com/company/suedeai"
]
}Lane 5 grade drops to D or below if: no schema is present on a page making factual product claims, or if FAQ schema items do not match visible text.
Goal: the page is structured so that LLMs, answer engines, and AI overviews can extract, quote, and cite it accurately without inventing facts.
Checklist:
Summary and definitions
question. The answer can stand alone without surrounding context.
not assumed
[Term] is [concise definition]. not buried innested clauses
FAQ and citation targets
Entity signals
and schema name field
sameAs links in schema point to at least one external authoritativeprofile (GitHub, LinkedIn, App Store, Wikipedia if applicable)
/p/1234 or /post)AI-accessible content
llms.txt or ai.txt consideration: if site has 10+ pages, note whetheran llms.txt is present or warranted (not required, but increases AI crawl signal)
cannot read)
"How Suede Routes Royalties" is more citable than "How does it work?")
Hallucination risk
"used by thousands" without evidence. State the real proof or remove it.)
source
Lane 6 grade drops to C or below if: the primary answer is not in the first 200 words, FAQ answers use "it" as the subject, or primary content is JavaScript-only.
Goal: copy earns action. Every sentence either moves the reader toward the primary CTA or proves the claim that does.
Checklist:
Directness
music release with rights and provenance"; feature: "A platform for music metadata")
Proof
name, live URL, or example
claims
Claims
removed
CTA
Trust
language when the product does rights infrastructure)
Filler removal: the test is whether a sentence can be deleted without the reader missing any information, delete it. Apply to: transitions, throat-clearing, hedging, adverb softeners, and exclamation marks.
Flag and remove:
Lane 7 grade drops to C or below if: the primary CTA is absent above the fold, any public claim is unverifiable, or the copy could belong to any competing product without changing a word.
Goal: confirm that Google's quality evaluator signals (Experience, Expertise, Authoritativeness, and Trustworthiness) are present and verifiable on the page.
Experience: Does the page show first-hand, real-world use of the product or topic? Look for: demos, screenshots of real output, case studies with specific results, personal or company proof.
Expertise: Does the content demonstrate deep, accurate knowledge? Look for: technical depth, correct use of domain vocabulary, specific examples over generic claims, citations to primary sources.
Authoritativeness: Is this site or page recognized as a source in the space? Look for: backlinks from authoritative sites (note if checkable), mentions in industry press, author credentials visible, organization About page.
Trustworthiness: Can users trust this content and site? Look for: HTTPS, privacy policy, clear contact and company info, accurate and verifiable claims, no misleading UI patterns, consistent authorship.
Checklist:
Grade: A (all four strong), B (3 strong), C (2 strong), D/F (1 or 0).
Lane 8 grade drops to C or below if: no real proof of experience or expertise is visible, contact or privacy information is absent, or misleading UI patterns are present.
Goal: for sites with multiple pages, confirm the content is organized into pillar and cluster pages with complete internal linking. Skip for single-page audits and note the skip.
Pillar page: one comprehensive, authoritative page on the core topic. Should rank for broad head terms.
Cluster pages: specific, narrow pages that support the pillar by covering sub-topics in depth. Each links back to the pillar.
Audit questions:
query)?
Output a simple map:
Pillar: [page] — [target keyword]
Cluster: [page] — [sub-topic keyword]
Cluster: [page] — [sub-topic keyword]
Orphan pages: [list or "none found"]
Cannibalization risks: [list or "none found"]Lane 9 grade drops to C or below if: no pillar page exists, cluster pages do not link back to the pillar, or two or more pages compete for the same primary keyword.
Report every finding in this block. Do not describe findings in prose.
[HIGH|MEDIUM|LOW] Finding title
Location: <URL, selector, or file + line>
Issue: <what is wrong and why it matters>
Fix: <exact corrective action>
Suggested copy or code: <literal rewrite, JSON-LD block, or command>
Verification: <how to confirm the fix worked>Severity guide:
Grade each lane A-F:
| Grade | Meaning |
|---|---|
| A | Fully implemented, no significant gaps |
| B | Mostly implemented, one or two medium findings |
| C | Partially implemented, one or more high findings |
| D | Significant gaps, multiple high findings |
| F | Lane is absent or actively harmful |
Hard caps:
Overall grade: convert letter grades to points (A=4, B=3, C=2, D=1, F=0). Lanes 1, 3, and 6 count 1.5x. Lanes 2, 4, 5, 7, 8, 9 count 1x. Lane 0 excluded. Max weighted score = (3 × 1.5 + 6 × 1) × 4 = 42. Overall letter: ≥38 = A, ≥30 = B, ≥22 = C, ≥14 = D, <14 = F.
Produce this block at the end of every full audit. Fill every field. Write "none found" or "not applicable" rather than leaving a field blank.
=== SEO AUDIT REPORT ===
Audited URL:
Audit date:
Source checked: [live URL | source file | both]
--- KEYWORD BRIEF (Lane 0 — omit if not requested) ---
Primary: [keyword] — [intent: info/nav/commercial/transactional] — [volume: low <1K/mo | medium 1K–10K | high >10K/mo] — [difficulty: low | medium | high]
Secondary: [k1 — intent — volume], [k2 — intent — volume], [k3 — intent — volume]
LSI terms: [list — grouped by subtopic]
Competitor gap queries: [query — competitor URL that ranks — content angle missing from target page]
SERP feature targets: [feature — eligibility reason]
Content brief: primary keyword appears in H1 + first 100 words + [N] times per 1,000 words; secondary keywords appear [1–2] times each
--- METADATA ---
SEO title (suggested):
Meta description (suggested):
H1 (suggested):
Subhead (suggested):
--- CONVERSION ---
Primary CTA (text and destination):
Secondary CTA (text and destination):
--- CONTENT ADDITIONS ---
Content brief (from Lane 0 — omit if not requested):
Target word count: [N] words (based on [intent] + SERP competition)
Required H2 sections: [list — derived from PAA and competitor H2 structure]
NLP term density check:
Primary "[keyword]": appears in H1 [yes/no], first 100 words [yes/no], [N] times per 1,000 words (target: 2–4)
Secondary "[keyword]": [N] times per 1,000 words (target: 1–2 each)
FAQ additions:
Q: [real searcher question — match PAA wording]
A: [≤100 words, subject named explicitly, no pronouns as subject]
Internal links to add (anchor text → destination URL):
External links to add (anchor text → destination URL):
Competitor content gap:
Competitor: [URL or "derived from niche"]
Missing sections: [H2 text — target query — priority: CRITICAL|IMPORTANT|INFORMATIONAL]
--- SCHEMA ---
Schema changes:
[Paste corrected or new JSON-LD block here]
--- AI EO NOTES ---
AI-ready summary (first 200 words target):
llms.txt warranted: [yes | no | already present]
Hallucination risk flags:
--- E-E-A-T NOTES ---
Experience proof present:
Expertise signals:
Authoritativeness signals:
Trustworthiness gaps:
--- TOPIC CLUSTER MAP (omit for single-page audits) ---
Pillar: [page] — [target keyword]
Cluster: [page] — [sub-topic keyword]
Orphan pages:
Cannibalization risks:
--- CORE WEB VITALS (risk factor only — not gradeable via curl) ---
CWV Risk: low / medium / high
Risk factors observed:
Render-blocking scripts above fold: [yes / no]
Images missing width/height or loading=lazy: [yes / no]
Missing font-display:swap: [yes / no]
Large JS bundles without code-splitting: [yes / no]
No preconnect for third-party origins: [yes / no]
Note: LCP/CLS/INP scores require Lighthouse CI or PageSpeed Insights API — not reported here.
--- SCORES ---
Copy score: /70
Directness: /10
Rhythm: /10
Trust: /10
Specificity: /10
Authenticity: /10
Density: /10
Search/AI readability: /10
Lane grades:
Lane 1 (Technical Access):
Lane 2 (Search and Answer Intent):
Lane 3 (Metadata):
Lane 4 (Structure):
Lane 5 (Schema Markup):
Lane 6 (AI EO):
Lane 7 (Copy and Conversion Quality):
Lane 8 (E-E-A-T Signals):
Lane 9 (Topic Cluster Architecture):
Overall grade:
--- CLAIM BOUNDARIES ---
Safe to publish:
Do not publish until verified:
Remove entirely:
--- VERIFICATION CHECKLIST ---
[ ] Status code confirmed 200
[ ] Canonical URL confirmed
[ ] robots.txt allows path
[ ] Schema validates at schema.org/validator
[ ] All internal links return 200
[ ] Primary CTA destination loads correctly
[ ] og:image loads at full resolution
[ ] JSON-LD blocks contain no fabricated content
--- SHIP GATE ---
ship | ship-with-caveats | hold
Reason:Follow these steps in order. Do not skip to findings before completing steps 1 through 3.
are available, check both and note any divergence between source and rendered output.
found. Do not paraphrase tag values.
<domain>/robots.txt and anylisted sitemap. Confirm the target URL is not blocked and is listed.
requested. Lanes 1–9 run on every audit (Lane 9 is N/A for single-page audits; note the skip). Work through each checklist item. Mark each item pass, fail, or N/A. Note the location of each failure.
lane. Put HIGH findings first within each lane.
metadata, or schema: provide the literal replacement text or JSON-LD block. Do not describe what the fix should say. Write it.
ship only if no HIGH findings remain and all hardcaps are met. ship-with-caveats if only MEDIUM or LOW findings remain and no claim is false. hold if any HIGH finding is unresolved, any claim is false, or the CTA destination is broken. Name any lane items that could not be verified and why (e.g., "Core Web Vitals: no field data access", "sitemap not publicly accessible").
Do not invent traffic estimates, ranking positions, citation frequency, or ROI from SEO changes. Name what was checked, what was skipped, and what requires additional tooling.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.