Claude Skill

suede-seo-audit

Suede-owned SEO and generative-search audit discipline. Runs a nine-lane evidence-based audit: access, intent, metadata, structure, supported schema, E-E-A-T, clusters, and exact rewrite fixes. Use when a page or site needs a deep standalone SEO/AI-visibility audit with scored la

LLM Mart · 0 points · 16 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download JasonColapietro-suede-creator-skills-skills_suede-seo-audit-f192517.zip · 28 KB
Part of jasoncolapietro/suede-creator-skills — 70 skills

Install

skills CLI npx skills add https://github.com/JasonColapietro/suede-creator-skills/tree/main/skills/suede-seo-audit
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install jasoncolapietro-suede-creator-skills@llmmart
Git git clone https://github.com/JasonColapietro/suede-creator-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole jasoncolapietro/suede-creator-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Suede SEO Audit

Gate policy — advisory, not blocking

Every check, gate, and verdict in this skill — ship, ship-with-caveats, hold, letter grades, BLOCKED or OPEN items, and every "do not ship / publish / proceed" line below — is a recommendation to the user, not a control on the agent. Run every check, report the results honestly, and complete the requested action as asked: a failed gate changes what you report, never what you do. Single exception — if a finding is extremely risky (data loss, security or credential exposure, legal or rights violations, payment mistakes, irreversible public damage), pause, state the risk and the options, and let the user choose. Their choice is final.

This skill goes deeper than an inline copy audit. It inspects live page source, validates schema, traces crawl access, checks whether content can be understood and sourced accurately, 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.

Core principle: never audit from memory. Every finding cites what was actually fetched, and every fix is written out literally, not described.


1. Source Truth

Do not audit from memory. Before writing a single finding, verify the live surface.

Required pre-audit checks

  • HTTP status code (200, 301, 404, 503): note exact code
  • Final URL after all redirects (is the canonical URL the destination?)
  • 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?
  • Sitemap evidence: if the site publishes sitemaps, is the URL present and is any <lastmod> value accurate? Absence is not an automatic indexing failure.
  • <title> tag: exact text, character count
  • <meta name="description">: exact text, character count
  • Open Graph tags: og:title, og:description, og:image, og:url, og:type
  • Twitter card tags: twitter:card, twitter:title, twitter:description, twitter:image
  • JSON-LD presence: any <script type="application/ld+json"> block present?
  • Primary H1: exact text, position in document

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.


2. Audit Lanes

Run all lanes. Score each A-F at the end. State explicitly when a check was skipped and why. The detailed per-lane checklists live in this skill's references/ folder — read the relevant file when you run the lane:

Lanes Checklist file
Lane 0 (keyword research, optional) references/keyword-research.md
Lanes 1–4, 6–9 references/lane-checklists.md
Lane 5 (schema) references/schema-templates.md

Before applying Google-specific search, generative-search, title/snippet, or structured-data rules, read references/google-search-guidance.md. It contains the primary-source baseline verified on 2026-07-19 and tells you which volatile rules to re-check before a ship decision.

Lane 0: Keyword Research (optional mode)

Activate when keyword discovery is requested; skip for technical-only or copy-only audits. When active, read references/keyword-research.md for the full protocol: evidence-backed query themes, related topics and entities, competitor content gaps, supported search-feature eligibility, and the content brief. Numeric demand stays unknown unless a dated source provides it.

Lane 0 is informational only. It produces a keyword brief and content brief, not a grade. Incorporate the brief into Lanes 2–7 findings where relevant.

Lane 1: Technical Access

Goal: confirm that search crawlers and other explicitly tested clients can reach and parse the page. Do not assume that one crawler's access policy or behavior represents another's. Run the Lane 1 checklist in references/lane-checklists.md: status, redirects, canonical, robots, sitemap, JS-free rendering, and the Core Web Vitals measurement protocol. Measure CWV when tooling allows (PageSpeed Insights at pagespeed.web.dev; curl time is a server-response proxy only); otherwise report each vital as "not measurable" with the reason plus observed risk factors. Do not invent scores; do report observable risks. CWV never enters the A-F grade.

Lane 1 grade drops to C or below if: an actual indexability block is present, the canonical is wrong, redirects fail, or primary content is absent from the tested rendered result. JavaScript use alone is not a failure.

Lane 2: Search and Answer Intent

Goal: confirm the page has a single coherent intent that matches real queries and can earn a featured snippet or AI citation. Run the Lane 2 checklist in references/lane-checklists.md: primary reader, primary query theme, the AI-answer-ready definition, one earned action, and cannibalization. Treat the opening-section definition as a Suede editorial clarity diagnostic, not a Google ranking requirement. If a concise answer cannot be constructed from the opening section, report the ambiguity and its reader impact.

Lane 2 grade drops to C or below if: the page has no clear primary reader, the intent conflicts with the title, or the opening section answers a different question than the URL implies.

Lane 3: Metadata

Goal: metadata is accurate, descriptive, and useful in search results and social previews. Character counts are preview diagnostics because Google has no fixed title or meta-description character limit and may generate different title links or snippets. Run the Lane 3 checklist in references/lane-checklists.md: title tag, meta description, Open Graph, Twitter/X card, alt text, author entity, and durable entity names.

Lane 3 grade drops to D or below if: the title is missing or misleading, the meta description is missing on a priority landing page, required social preview assets are broken, or the page's entity cannot be identified from the title, description, and H1 together. Length alone never causes a grade drop.

Lane 4: Structure

Goal: the page's hierarchy, section order, internal links, and terminology serve the reader's intent. Run the Lane 4 checklist in references/lane-checklists.md: headings, reader-driven section coverage, links, optional FAQ quality, and natural topic/entity coverage. Do not apply a universal page template, word count, or keyword-density quota.

Lane 4 grade drops to C or below if: H1 is missing, the page omits information required to satisfy its primary reader intent, internal links use non-descriptive anchor text throughout, or three or more heading sections run past the ~375-word retrieval chunk limit. A page whose entire body sits under one heading cannot earn above C in this lane, however clean its markup is. Missing an exact-match phrase is not a failure when the page clearly covers the subject with natural language.

Lane 5: Schema Markup

Goal: decide whether structured data is warranted, then ensure every JSON-LD block is valid, eligible for its stated search feature, matches visible content, and describes a structure the visible prose actually has. Run the Lane 5 checklist in references/schema-templates.md, which also holds the retrievability lens, the page-type → @type mapping, and minimum JSON-LD templates (Organization, SoftwareApplication, FAQPage, Article).

When schema is missing or broken, provide the exact corrected JSON-LD block inline in the findings. Do not describe it in prose.

Validity and truthfulness are necessary and not sufficient. Correct markup can still describe a structure the prose does not have — a FAQPage whose questions are <summary> elements is one retrieval block however many entries it declares, and its text can match the visible text character for character while that stays true. Lane 4 measures the block; Lane 5 decides whether the schema claimed a structure the prose lacks. Run the retrievability lens to classify each property against evidence you can quote, and never name a Discovery Engine flag as observed Google Search behavior.

Lane 5 grade drops to D or below if: markup is misleading, invalid, hidden from users, or uses a type/property combination that is ineligible for the claimed Google feature. It drops to C or below if schema declares a structure the visible prose does not carry, or if a material claim's only machine-readable form is JSON-LD with no prose counterpart. A page does not fail merely because no schema is warranted. FAQ markup never earns a visibility promise; Google generally limits FAQ rich results to authoritative government and health sites.

Lane 6: AI EO (Answer Engine Optimization)

Goal: help people and automated systems understand and source the page accurately without inventing facts. Run the Lane 6 checklist in references/lane-checklists.md: clear opening answer, plain definitions, contrast statements where real alternatives exist, explicit subjects, verified entity signals, accessible primary content, source links, and hallucination-risk claims. Google Search ignores llms.txt; record one only when another named consumer documents support, and never grade its presence as a search signal. suede-ai-seo is the canonical owner of the extractability standard behind this lane and of the reconciliation between Google's published stance and what the non-Google answer engines actually reward — cite it rather than re-deriving either, and land any threshold change there first.

Lane 6 grade drops to C or below if: the opening section cannot state the page's subject and answer clearly, material claims lack sources, primary content is inaccessible without JavaScript and has no crawlable fallback, or the title, H1, or URL promises a comparison the body never makes. A page that promises no comparison and has no named alternatives does not drop for carrying no contrast content.

Lane 7: Copy and Conversion Quality

Goal: copy earns action. Every sentence either moves the reader toward the primary CTA or proves the claim that does. Run the Lane 7 checklist in references/lane-checklists.md: directness, proof, claims, CTA, trust, and filler removal.

Lane 7 grade drops to C or below if: the intended action is absent or undiscoverable in the rendered task path, any published statement is unverifiable, or the copy could belong to any competing product without changing a word.

Lane 8: E-E-A-T Signals

Goal: use Experience, Expertise, Authoritativeness, and Trustworthiness as a human quality/trust lens and verify the available evidence. E-E-A-T is not a standalone ranking score exposed by Google. Run the Lane 8 checklist in references/lane-checklists.md for what counts as evidence for each concept.

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.

Lane 9: Topic Cluster Architecture

Goal: when a multi-page site benefits from a pillar/cluster strategy, confirm that the selected topic ownership and internal paths are coherent. Skip for single-page audits; mark N/A when that architecture does not serve the site's user journeys. Run the Lane 9 audit questions and cluster-map output format in references/lane-checklists.md.

When a cluster strategy is in scope, Lane 9 grade drops to C or below if: its declared pillar is missing, important cluster pages are orphaned, or multiple pages appear to compete for the same query intent without a clear owner.


3. Finding Format

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:

  • HIGH: blocks indexing, breaks CTA, contains a false published statement, schema invalid
  • MEDIUM: may reduce result clarity, sourceability, or reader task success; missing a relevant recommended signal
  • LOW: copy quality, filler, minor structural improvement

4. Scoring

Grade each lane A-F. Grades are mechanical — derived from finding counts, not impression:

Grade Rule
A No HIGH or MEDIUM findings in the lane
B No HIGH findings; one or two MEDIUM findings
C Exactly one HIGH finding, or three or more MEDIUM findings
D Two or three HIGH findings
F Four or more HIGH findings, or the lane is absent or actively harmful

Hard caps:

  • Cannot earn A overall without verifying a live URL
  • Cannot earn A if primary CTA is broken or absent
  • Cannot earn A if any published statement is false, unverifiable, or invented
  • Cannot earn A in Lane 5 if present or warranted schema does not validate
  • Cannot earn A in Lane 5 if schema declares a structure (FAQPage, HowTo, ItemList, BreadcrumbList) that the visible prose does not carry
  • Cannot earn A in Lane 6 if primary content was unavailable to the tested intended clients and the audit cannot evaluate it
  • Cannot earn A in Lane 8 if contact, privacy policy, or HTTPS is absent
  • Cannot earn A in an in-scope Lane 9 if material query-intent ownership conflicts remain unresolved

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.


5. Output Template

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 query theme: [query family] — [intent] — [evidence source/date]
Demand: [sourced value/range | unknown]
Supporting query themes: [query — observed/inferred — evidence]
Related topics and entities: [list grouped by reader need]
Content gaps: [subject — checked URL/source — reader value — priority]
Search-feature eligibility: [feature — eligible/validated/observed/not verified]
Content brief: [reader-first section, entity, link, and source plan]

--- 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):
  Length: [reader-driven scope; no universal word-count target]
  Required subjects: [list derived from intent and verified source gaps]
  Topic/entity coverage:
    Primary subject: [clear/unclear] — evidence: [locations]
    Supporting subjects: [covered/missing] — evidence: [locations]
FAQ additions:
  Q: [real reader/searcher question — cite observed wording when available]
  A: [complete answer in the length the reader needs; subject explicit]
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]
Retrievability: [property path] — [prose-backed | indexable-only | decorative | unclassified] — evidence: [quoted prose | feature doc URL | none]
Schema-only claims: [property = value with no prose counterpart | none]
Structure claim vs prose: [@type] declares [N] | visible headings [N] | [match/mismatch]

--- AI EO NOTES ---
Clear opening summary:
Machine-readable AI file: [named consumer and documented use | none warranted]
Google Search effect of llms.txt: none
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 (never part of the A-F grade) ---
LCP: [score or "not measurable" — reason]
CLS: [score or "not measurable" — reason]
INP: [score or "not measurable" — reason]
Lighthouse score (if available): Performance [N] | Accessibility [N] | Best Practices [N] | SEO [N]
CWV Risk: low / medium / high
CWV risk factors observed: [list or "none"]
Note: scores come only from PageSpeed Insights or Lighthouse. Do not invent scores; do report observable risks. curl time_total is a server-response proxy, not a CWV score.

--- SCORES ---
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:

--- EVIDENCE BOUNDARIES ---
Safe to publish:
Recommend holding until verified (user's call):
Remove entirely:

--- VERIFICATION CHECKLIST ---
[ ] Status code confirmed 200
[ ] Canonical URL confirmed
[ ] robots.txt allows path
[ ] Schema vocabulary/shape validates at schema.org/validator
[ ] Google feature eligibility validates in Rich Results Test when applicable
[ ] All internal links return 200
[ ] Primary CTA destination loads correctly
[ ] og:image loads at full resolution
[ ] JSON-LD blocks contain no fabricated content
[ ] Structure declared by FAQPage/HowTo/ItemList/BreadcrumbList is carried by visible page structure

--- SHIP GATE ---
ship | ship-with-caveats | hold

Reason:

6. Workflow Steps

Follow these steps in order. Do not skip to findings before completing steps 1 through 3.

  1. Read the target. Fetch the live URL or open the source file. If both are available, check both and note any divergence between source and rendered output.

  2. Run the Source Truth checks from Section 1. Record every field exactly as found. Do not paraphrase tag values.

  3. Check robots.txt and sitemap. Fetch <domain>/robots.txt and any listed sitemap. Confirm the target URL is not blocked and is listed.

  4. Scan all active lanes. Lane 0 activates only when keyword discovery is requested. Lanes 1–8 run on every audit. Lane 9 is N/A for single-page audits and sites where a cluster model is not warranted; note the reason. Read the lane's checklist file from references/ and work through each item. Mark each item pass, fail, or N/A. Note the location of each failure.

  5. Write ranked findings. Use the finding format from Section 3. Group by lane. Put HIGH findings first within each lane.

  6. Write exact rewrites. For every HIGH and MEDIUM finding involving copy, metadata, or schema: provide the literal replacement text or JSON-LD block. Do not describe what the fix should say. Write it.

  7. Fill the output template from Section 5. Every field must be filled.

  8. Score each lane A-F using the rules from Section 4. Apply hard caps.

  9. Set the recommended ship gate. Recommend ship only if no HIGH findings remain and all hard caps 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").


Red Flags — Stop

If you catch yourself thinking any of these, stop and run the check for real:

  • "I know this page; I can grade it from memory." — Fetch it. Source Truth first.
  • "curl was fast, that covers Core Web Vitals." — curl is a server-response proxy; CWV scores come only from PageSpeed Insights or Lighthouse, or they are "not measurable" with a reason.
  • "I'll describe the schema fix; they can write the JSON." — Write the literal JSON-LD block.
  • "The title or description crossed a magic character limit." — Count it for preview diagnostics, then judge accuracy and likely truncation in context. Google publishes no fixed character limit.
  • "A traffic estimate will make this finding land harder." — Never invent traffic, rankings, or ROI.
  • "The lane mostly passes; I'll skip the rest of the checklist." — Every item gets pass, fail, or N/A.

7. Boundaries

Do not invent traffic estimates, ranking positions, citation frequency, or ROI from SEO changes. Do not present llms.txt, content chunking, exact-match term density, word count, or unsupported schema as Google ranking requirements. Name what was checked, which primary guidance was used, what was skipped, and what requires additional tooling.


Routing

  • Need a fast A-F promotion-readiness verdict instead of a full audit → suede-visibility-grader.
  • Findings point at conversion problems (CTA, friction, offer) → suede-site-alchemy for the rewrite pass.
  • Findings require fresh copy, not fixes → suede-copy.
  • Audit passed and the page is part of a release → suede-launch-packaging to package the launch.
  • Findings concern AI answer engines (getting cited by ChatGPT/Perplexity/AI Overviews, llms.txt, AI-bot access) → suede-ai-seo for the generative-visibility pass.
Files (suede-creator-skills)
  • agents
    • openai.yaml 721 B
      interface:
        display_name: "Suede SEO Audit"
        short_description: "Evidence-led SEO and AI visibility audit"
        default_prompt: "Use $suede-seo-audit to audit [URL or source file]. Read the current Google guidance reference, inspect live behavior, and run all nine lanes: technical access, search and answer intent, metadata, structure, eligible structured data, generative-search visibility, copy and conversion quality, E-E-A-T, and topic clusters. Add Lane 0 query research when discovery is requested, but label demand and competitive difficulty unknown unless a dated source supports them. Return ranked findings with evidence, exact rewrites, lane grades, and a ship gate."
      policy:
        allow_implicit_invocation: true
      
  • references
    • google-search-guidance.md 3.3 KB
      # Current Google Search Guidance
      
      Use this reference before applying SEO, AEO, generative-search, metadata, or
      structured-data findings. It records the primary-source baseline verified on
      2026-07-19. Re-check the linked documentation when the current rule affects a
      ship decision.
      
      ## Generative search
      
      Google Search states that its generative features rely on the same foundational
      SEO practices as ordinary Search.
      
      - Google Search does not use `llms.txt` or similar AI text files for visibility
        or ranking. Such a file may serve another explicitly documented consumer,
        but its presence is neutral for Google Search.
      - No AI-specific schema or markup is required.
      - There is no requirement to split content into tiny chunks or rewrite it for
        AI systems.
      - Write useful, accessible, sourceable content for people. Do not create
        repetitive variants for every synonym or long-tail query.
      
      Source: [Google's guide to optimizing for generative AI features](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide)
      
      ## Keywords and content length
      
      - Google defines unnatural repetition intended to manipulate rankings as
        keyword stuffing.
      - There is no universal keyword-density target or ideal page length.
      - Evaluate whether the page uses the entity and subject language naturally and
        answers the reader's intent. Do not prescribe repetitions per 1,000 words.
      
      Sources:
      
      - [Spam policies for Google web search](https://developers.google.com/search/docs/essentials/spam-policies)
      - [SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)
      
      ## Titles and snippets
      
      - The HTML `title` element and meta description have no fixed Google character
        limit. Search results truncate them as needed for the device and query.
      - Google may generate title links and snippets from page content and other
        signals instead of using the supplied fields verbatim.
      - Character counts are useful preview diagnostics, not pass/fail ranking rules.
      
      Sources:
      
      - [Influencing title links](https://developers.google.com/search/docs/appearance/title-link)
      - [Controlling snippets](https://developers.google.com/search/docs/appearance/snippet)
      
      ## Structured data
      
      - Markup must represent visible page content, use a supported type when Google
        Search appearance is the goal, and satisfy that feature's required fields.
      - Valid markup creates eligibility; it does not guarantee a rich result.
      - FAQ rich results are generally limited to authoritative government and health
        sites. Do not promise FAQ visibility to ordinary product or marketing sites.
      - Use the Rich Results Test for Google eligibility and Schema.org Validator for
        general vocabulary/shape checks. Record which validator was used.
      
      Sources:
      
      - [General structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
      - [Google-supported structured data features](https://developers.google.com/search/docs/appearance/structured-data/search-gallery)
      - [FAQ and HowTo search appearance changes](https://developers.google.com/search/blog/2023/08/howto-faq-changes)
      
      ## Evidence boundary
      
      Search Console, analytics, third-party SEO tools, and live SERPs measure
      different things. Name the source, market, scope, and date. If a metric or
      result was not observed, mark it unknown. Never convert a heuristic into a
      traffic, ranking, citation, or conversion promise.
      
    • keyword-research.md 4.7 KB
      # Lane 0: Evidence-Based Keyword Research
      
      Read this file only when keyword discovery is requested. Lane 0 produces a
      brief, not a grade.
      
      **Goal:** identify a defensible query theme and content gaps without inventing
      search demand, ranking difficulty, or traffic potential.
      
      ## Evidence rules
      
      - Record the source, market, device scope, and observation date for every
        numeric search-volume, traffic, CPC, or ranking claim.
      - Prefer current first-party data: Search Console queries, site analytics,
        Google Ads Keyword Planner exports, or another user-supplied dated export.
      - If no numeric source is available, write `volume: unknown`. Do not infer a
        monthly range from query length, topic breadth, or intuition.
      - Distinguish an observed SERP from a ranking guarantee. Search results vary by
        time, location, device, and personalization.
      - Do not manufacture difficulty scores. Describe the visible competition and
        evidence instead: result types, recognized domains, page intent, content
        depth, and the target site's existing authority or coverage.
      - Use `related topics and entities`, not `LSI keywords`. Include terms only
        when they help a reader understand the subject.
      
      ## Protocol
      
      1. **Primary query theme:** choose one phrase or tightly related query family
         that matches the page's purpose. Classify intent as informational,
         navigational, commercial, transactional, or mixed. Cite the evidence used.
      
      2. **Supporting query themes:** list 3-5 related queries that serve the same
         reader without forcing unnatural repetition. Mark each as observed in a
         source, seen on the live SERP, or inferred from the subject.
      
      3. **Related topics and entities:** list the people, products, standards,
         concepts, and subtopics a complete answer should cover. Group them by
         reader need. This is a coverage map, not a density quota.
      
      4. **Competitor content gap:** when competitor URLs are supplied or a live
         search is authorized, inspect the current pages. For each competitor:
      
         a. Record the URL, access date, title, and relevant H2/H3 sections.
         b. Identify useful subjects the target page omits.
         c. Classify each gap as `critical`, `important`, or `optional` based on
            reader intent, not presumed ranking impact.
      
         Output:
      
         ```text
         Competitor: [URL] (checked [YYYY-MM-DD])
         Missing subject: [subject or heading]
         Evidence: [what the competitor covers and the target omits]
         Reader value: [why this helps answer the primary intent]
         Priority: [critical | important | optional]
         ```
      
         If live competitor pages were not checked, say so. Do not invent their
         headings, rankings, or traffic.
      
      5. **Search-feature eligibility:** name only features supported by current
         Google Search documentation for the page type. Separate:
      
         - technically eligible;
         - validated in the Rich Results Test;
         - observed in a live result;
         - not verified.
      
         Structured data can make a page eligible for a supported feature; it does
         not guarantee display.
      
      ## Content brief
      
      Generate this only when Lane 0 is active and a page is being built or
      substantially revised.
      
      | Field | Guidance |
      |---|---|
      | Reader and job | Name the reader, question, and useful outcome. |
      | Primary query theme | Phrase or query family, intent, evidence source, market, and date. |
      | Demand evidence | Numeric value with dated source, or `unknown`. |
      | Competitive evidence | URLs and observations checked live, or `not checked`. |
      | Required sections | Subjects needed to answer the reader completely; do not copy competitor headings mechanically. |
      | Related topics/entities | Natural coverage map; no occurrence quota. |
      | Schema eligibility | Supported Google feature and required properties, or `no supported rich-result type identified`. |
      | Internal links | Verified anchor text and destinations that help the reader continue. |
      | External sources | Current primary or authoritative sources for factual claims. |
      | Length | Whatever is needed to answer the intent clearly. Do not assign a universal word-count target. |
      
      ## Output
      
      ```text
      Primary query theme: [query family]
      Intent: [informational | navigational | commercial | transactional | mixed]
      Evidence source: [source, market, device scope, checked date]
      Demand: [sourced value/range | unknown]
      Visible competition: [observations with URLs | not checked]
      Supporting query themes: [query — observed/inferred — evidence]
      Related topics and entities: [grouped list]
      Content gaps: [subject — evidence — reader value — priority]
      Search-feature eligibility: [feature — eligible/validated/observed/not verified]
      Content brief: [reader-first section and source plan]
      ```
      
      Incorporate this brief into Lanes 2-7 where relevant. Never turn missing
      numeric tooling into fabricated precision.
      
    • lane-checklists.md 21.2 KB
      # Lane Checklists
      
      Detailed checklists for suede-seo-audit Lanes 1–4 and 6–9. Read the checklist
      for each lane as you run it. Lane 5 (Schema Markup) lives in
      references/schema-templates.md. Grade-drop rules and scoring live in SKILL.md.
      
      ## Contents
      
      - [Lane 1: Technical Access](#lane-1-technical-access)
      - [Lane 2: Search and Answer Intent](#lane-2-search-and-answer-intent)
      - [Lane 3: Metadata](#lane-3-metadata)
      - [Lane 4: Structure](#lane-4-structure)
      - [Lane 6: AI EO (Answer Engine Optimization)](#lane-6-ai-eo-answer-engine-optimization)
      - [Lane 7: Copy and Conversion Quality](#lane-7-copy-and-conversion-quality)
      - [Lane 8: E-E-A-T Signals](#lane-8-e-e-a-t-signals)
      - [Lane 9: Topic Cluster Architecture](#lane-9-topic-cluster-architecture)
      
      ---
      
      ## Lane 1: Technical Access
      
      - [ ] HTTP status is 200 on the canonical URL
      - [ ] Redirects reach the intended canonical without loops or avoidable chains;
            record every hop and its status rather than claiming a fixed equity loss
      - [ ] Canonical URL is self-referencing and matches the intended URL
      - [ ] Trailing slash is consistent across all internal links to this page
      - [ ] www and non-www resolve to the same canonical (no duplicate indexing)
      - [ ] http redirects to https (no mixed-content split)
      - [ ] `robots.txt` permits the intended Google crawler. Record `*` and
            `Googlebot` rules separately. Check other named crawlers only when the
            audit asks for them; one crawler's rule does not represent another's.
      - [ ] `<meta name="robots">` is absent or set to `index, follow`
      - [ ] If the site publishes a sitemap, the canonical URL is represented where
            appropriate; `<lastmod>` is present only when it accurately reflects a
            significant page update. A sitemap is a discovery aid, not a guarantee.
      - [ ] Compare raw HTML with the rendered DOM. If primary content depends on
            JavaScript, verify the rendered result with an appropriate browser and,
            when available, Google URL Inspection rather than failing it merely for
            using JavaScript.
      - [ ] Core Web Vitals measurement protocol (see below — never enters the A-F
            grade)
      
      ### Core Web Vitals (measure when possible — never part of the A-F grade)
      
      Measurement protocol:
      
      - [ ] Run `curl -o /dev/null -s -w "%{time_total}" <URL>` as a proxy for server
            response time. curl measures server response, not browser rendering — on
            its own it is never a CWV score.
      - [ ] If PageSpeed Insights is accessible at pagespeed.web.dev, fetch it.
            Report LCP, CLS, INP against these thresholds:
            LCP ≤ 2.5s = Good, 2.5–4s = Needs Improvement, >4s = Poor.
            CLS ≤ 0.1 = Good, 0.1–0.25 = Needs Improvement, >0.25 = Poor.
            INP ≤ 200ms = Good, 200–500ms = Needs Improvement, >500ms = Poor.
      - [ ] If tooling is unavailable, report each vital as "not measurable" with the
            reason, and record implementation signals to investigate without turning
            them into invented CWV scores: render-blocking work, hero-resource
            priority, image dimensions/compression, font loading, main-thread work,
            long tasks, third-party code, and layout shifts. Do not lazy-load the LCP
            image by rote or prescribe `preconnect`, a format, or code splitting
            without a trace showing the bottleneck.
      
      Do not invent scores; do report observable risks. CWV never enters the lane's
      A-F grade.
      
      ---
      
      ## Lane 2: Search and Answer Intent
      
      - [ ] Name the primary reader in one phrase (e.g., "a creator who wants to
            register a music release")
      - [ ] Name the primary query theme (what someone types or asks to land here)
      - [ ] Write a standalone definition from the opening section: "[Entity] is
            [what it does] for [who] by [how]." If the page cannot support one,
            report the ambiguity and reader impact. This is a Suede clarity
            diagnostic, not a Google ranking requirement.
      - [ ] Name one action the page should earn (install, sign up, read docs, fork
            repo, contact)
      - [ ] Check for keyword cannibalization: are there three or more other pages on
            the same site targeting the same primary term? If yes, flag which URL
            should be the canonical topic owner
      - [ ] Does the page answer a question a person would plausibly ask aloud?
      - [ ] Is the primary intent clear in the opening section without relying on a
            universal word-count cutoff?
      
      ---
      
      ## Lane 3: Metadata
      
      **Title tag**
      - [ ] Present, concise, descriptive, and specific to this page
      - [ ] Primary subject or entity is identifiable without forced front-loading
      - [ ] Brand naming and separators are accurate and consistent; no separator is
            treated as a ranking requirement
      - [ ] Accurately matches the page and visible main heading
      - [ ] Does not start with "Welcome to" or the domain name
      - [ ] Character count recorded as a preview diagnostic only. Google has no
            fixed title character limit and truncates to fit the result context.
      
      **Meta description**
      - [ ] Present and accurately summarizes this page
      - [ ] Contains the primary outcome or action, not a feature list
      - [ ] Does not duplicate the title
      - [ ] Does not contain structured data markup or JSON
      - [ ] Character count recorded as a preview diagnostic only. Google has no
            fixed meta-description character limit and may use page content instead.
      
      **Open Graph**
      - [ ] og:title and og:description are accurate and preview-tested on the target
            social surfaces; no unsupported universal character cutoff is applied
      - [ ] og:image: set and preview-tested at the target platform's current
            recommended dimensions/crop; meaningful content survives cropping
      - [ ] og:url: matches canonical URL
      - [ ] og:type: set to `website`, `article`, or appropriate type
      
      **Twitter/X card**
      - [ ] twitter:card: `summary_large_image` for pages with a hero image
      - [ ] twitter:title and twitter:description: set and distinct from OG when
            appropriate
      - [ ] twitter:image: set and accessible without authentication
      
      **Other**
      - [ ] Informative images have contextual alt text; decorative images use empty
            alt text or equivalent semantics instead of redundant descriptions
      - [ ] Author or publisher entity name appears in metadata or schema (not just
            visible copy)
      - [ ] Durable entity names are consistent across relevant metadata and visible
            content without requiring repetition in every field
      
      ---
      
      ## Lane 4: Structure
      
      **Headings**
      - [ ] One clear page-level heading or equivalent semantic main heading matches
            the title intent. Multiple H1 elements are not failed solely by count;
            judge hierarchy and accessibility in the actual document.
      - [ ] H2s cover the primary sub-topics a searcher would expect
      - [ ] H3s are optional but used consistently if present
      - [ ] Headings are concise enough to scan and specific enough to identify their
            section; no universal word cutoff is applied
      
      **Retrieval chunking**
      - [ ] No heading section exceeds ~375 words (500 tokens), the largest chunk
            Google's Discovery Engine (Vertex AI Search) retrieves. Measure the prose
            between one heading and the next, excluding `<nav>` and `<footer>` chrome.
      - [ ] An accordion, tab set, or FAQ whose items are marked up with `<summary>`,
            `<button>`, or `<div>` rather than headings counts as ONE block, however
            many items it holds. Valid FAQPage JSON-LD does not fix this: the schema
            can describe a structure the prose does not have, and a schema-only pass
            is the most common way this defect survives an audit.
      - [ ] Each claim worth citing sits inside one chunk together with the heading
            that identifies it. A claim split across a boundary can be retrieved
            without the heading that gives it meaning.
      - [ ] Record the largest block's word count and its heading as evidence, not a
            pass/fail alone. A section within ~10% of the limit is worth flagging,
            since routine copy edits push it over.
      
      Chunking check output format:
      ```
      Largest block: [N] words under "[heading]" | limit ~375 | [within/over]
      Blocks over limit: [count] of [total headings]
      Accordion/FAQ items marked up as headings: [yes/no — N items]
      ```
      
      **Heading self-sufficiency**
      - [ ] Every H2-H6 names its own subject. Discovery Engine carries the ancestor
            headings alongside a chunk OPTIONALLY, so a chunk can arrive holding only
            its own immediate heading. This is NOT the hierarchy check above: a page
            can nest H1 > H2 > H3 perfectly and still have an H3 that identifies
            nothing once detached.
      - [ ] No heading is a bare stock phrase — How it works, Pricing, Features,
            Overview, Benefits, FAQ, Get started, Why us, Our process. An H3 reading
            "Pricing" is meaningless away from the H2 that named the subject;
            "How Suede Scan pricing works" survives alone.
      - [ ] Single-word headings get the hardest look, since they carry a subject only
            by accident. A heading already holding a proper noun, an acronym, or the
            page's primary subject passes — do not rewrite it.
      - [ ] Record each finding with its parent heading, so the fix (folding the
            parent's subject into the child) is visible without opening the page.
      - [ ] Warn, never fail, and never drop a grade on this alone. It is a heuristic
            about language. Where bare headings run through the whole page, report one
            finding about the page rather than one per heading.
      
      Heading self-sufficiency output format:
      ```
      Detached heading "[heading]" (H[n], under "[parent]") | [stock phrase/single word] | fix: "[rewritten heading]"
      Sub-headings not naming their own subject: [count] of [total]
      ```
      
      **Table markup**
      - [ ] Comparison content uses `<table>`, not CSS grid or flex `<div>`s.
            Discovery Engine parses tables as structured content; a grid-built table
            reads as an undifferentiated run of text, so the row and column
            relationships that make a comparison quotable are lost.
      - [ ] Structure carries the finding, never a class name: repeated sibling
            elements with a consistent child count, holding short cell-sized text.
            Confirm the content is genuinely tabular by eye before reporting it.
      - [ ] Class names are the weakest signal and prove nothing alone. `flex-row`,
            `grid-rows-*`, `flex-col` and `grow-0` are layout utilities — measured
            against live homepages on 2026-08-22, a substring match on grid|row|col
            fired on four of five.
      - [ ] Report as an informational observation, never as a scored failure. CSS
            grid is used for every kind of layout, and a false finding in a paid audit
            costs more than a missing one.
      - [ ] A page that already ships a real `<table>` gets the benefit of the doubt:
            the author knows the element, so a grid there is more likely deliberate.
      
      Table markup output format:
      ```
      Unmarked table: [rows] rows x [columns] columns of <[tag] class="[class]"> | tabular by eye: [yes/no]
      Page uses <table> anywhere: [yes/no]
      ```
      
      **Section coverage and order**
      - [ ] Opening: what the page is and who it serves
      - [ ] Evidence appears near the claims it supports
      - [ ] Instructions or explanation follow the reader's natural task order
      - [ ] Objections or common questions are addressed when they materially help
      - [ ] CTA placement matches the page's funnel stage and does not hide the answer
      
      **Links**
      - [ ] Internal links use descriptive anchor text (not "click here" or "read more")
      - [ ] Internal links connect to relevant destinations where they help the user
            or discovery; no arbitrary link quota is applied
      - [ ] No internal links are broken (verify with fetch or curl)
      - [ ] External links go to authoritative sources when making factual claims
      - [ ] Link behavior is accessible and predictable. Opening a new tab is a UX
            decision, not an SEO requirement; warn users when a new context opens.
      
      **FAQ (only when useful to the reader)**
      - [ ] FAQ section is present only when distinct recurring questions warrant it
      - [ ] Each FAQ item is a real question a user or searcher would ask
      - [ ] Each FAQ answer is self-contained (the answer makes sense without reading
            the question)
      - [ ] Each answer is as short as clarity permits and as long as accuracy needs;
            no unsupported universal word limit is applied
      
      **Topic and entity coverage**
      - [ ] The title, H1, and opening make the primary subject unambiguous using
            natural language; exact-match repetition is not required
      - [ ] Supporting subjects and entities needed for a complete answer are covered
            where they help the reader
      - [ ] No term is repeated unnaturally or inserted solely to manipulate ranking
      - [ ] Synonyms and related language are used for clarity, not to satisfy a quota
      
      Coverage check output format:
      ```
      Primary subject "[subject]": title [clear/unclear] | H1 [clear/unclear] | opening [clear/unclear]
      Supporting subject/entity "[name]": [covered/missing/not needed] | evidence: [section or selector]
      Natural-language check: [clear | repetitive | stuffed] | evidence: [quoted text]
      ```
      
      ---
      
      ## Lane 6: AI EO (Answer Engine Optimization)
      
      **Summary and definitions**
      - [ ] The opening section contains a clear answer to the page's primary
            question. The answer can stand alone without surrounding context.
      - [ ] The product, skill, or service is defined plainly in the first section,
            not assumed
      - [ ] No jargon is used without an inline definition on first use
      - [ ] Definitions are written as `[Term] is [concise definition].` not buried in
            nested clauses
      
      **Contrast and comparison**
      - [ ] Where the subject has named alternatives, a competing approach, or a
            do-nothing option, the page states at least one difference in its own
            words. Google's Discovery Engine (Vertex AI Search) ranks with a
            cross-attention model that reads negation and contrast directly, so
            "unlike X, this does Y" carries meaning that embedding similarity alone
            flattens away. Quote the sentence as evidence; the presence of the word
            "unlike" is not the check.
      - [ ] Comparative framing the page already promises is delivered in the body. A
            title, H1, or URL containing "vs", "alternative to", "best ... for", or
            "without ..." commits the page to naming the other option and the
            difference. This is the most common way the gap survives an audit: the
            framing sits in the metadata and nowhere in the prose.
      - [ ] Segment framing ("best for {segment}") and constraint framing ("without
            {constraint}") appear where the page genuinely serves a narrower reader
            than its category does. Do not add a segment the product does not serve
            or a constraint it does not remove.
      - [ ] A page whose subject has no alternatives and no competitors passes with no
            contrast content at all. Mark it N/A and name why in one line. No
            comparison quota is applied, and a page does not improve by acquiring a
            rival it does not compete with.
      
      Contrast check output format:
      ```
      Alternatives in scope: [named list | none — reason]
      Contrast statement: [quoted sentence | absent] | location: [section or selector]
      Comparison promised by title/H1/URL: [quoted phrase | none] | delivered: [yes/no]
      Segment or constraint framing: [quoted | not applicable]
      ```
      
      **Answer and source quality**
      - [ ] Answers use the format that best serves the content: prose, steps, table,
            or list. Do not claim one format receives automatic citation preference.
      - [ ] Ambiguous pronouns do not obscure the subject
      - [ ] Material factual claims link to a current primary or authoritative source
      
      **Entity signals**
      - [ ] Company/product identity is explicit and consistent in the places where
            readers and parsers need it; schema is included only when warranted
      - [ ] Any `sameAs` links identify the same entity and point only to verified
            external profiles. Omit the property when no verified profile exists.
      - [ ] URL is stable and descriptive where practical; an opaque legacy URL is
            not treated as a ranking failure by itself
      
      **Accessible content and optional machine-readable files**
      - [ ] Record `llms.txt` or another AI-specific file only when a named consumer
            documents support. State explicitly that Google Search ignores
            `llms.txt`, so it neither helps nor harms Google visibility.
      - [ ] Primary content is present in the tested rendered output. Record raw-HTML
            dependence as a cross-client/latency risk, not an automatic Google block.
      - [ ] Any paywall or auth gate is documented so the audit does not claim that
            inaccessible content was evaluated
      - [ ] Headings identify their subject clearly for readers and assistive
            technology; no unverified citation advantage is claimed
      
      **Hallucination risk**
      - [ ] Page does not make vague claims an LLM could cite incorrectly (e.g.,
            "used by thousands" without evidence. State the real proof or remove it.)
      - [ ] No stat, partner name, or pricing claim is present without a verification
            source
      
      ---
      
      ## Lane 7: Copy and Conversion Quality
      
      **Directness**
      - [ ] First sentence names the outcome, not the feature (outcome: "Register a
            music release with rights and provenance"; feature: "A platform for music
            metadata")
      - [ ] No throat-clearing openers ("Welcome to", "In today's digital landscape")
      - [ ] Active voice with a named actor in each key sentence
      - [ ] Subhead adds proof, audience, or workflow, not a restatement of the hero
      
      **Proof**
      - [ ] At least one real artifact: link, command, screenshot reference, file
            name, live URL, or example
      - [ ] No invented stats, testimonials, partner names, pricing, or availability
            claims
      - [ ] Proof appears before the CTA, not after
      
      **Claims**
      - [ ] Every superlative ("only", "best", "first") is either verifiable or
            removed
      - [ ] Legal, payment, privacy, or regulatory claims are accurate and sourced
      - [ ] Product capabilities described match what is currently shipped and live
      
      **CTA**
      - [ ] The primary action is discoverable at the point the target reader is
            ready for it; no fixed fold placement is assumed
      - [ ] CTA text is an action + object ("Install the skill", not "Get started")
      - [ ] CTA hierarchy is understandable in rendered desktop/mobile tests; do not
            impose a universal count without observing task confusion
      
      **Trust**
      - [ ] If testimonials are present, they are real and attributable
      - [ ] If testimonials are absent, copy does not imply them
      - [ ] Brand vocabulary matches the actual product (no generic AI-music-app
            language when the product does rights infrastructure)
      
      **Filler removal**: the test — if a sentence can be deleted without the reader
      losing information, delete it. Apply to transitions, throat-clearing, hedging,
      adverb softeners, and exclamation marks.
      
      Flag and remove:
      - [ ] Filler transitions ("Additionally", "Furthermore", "It is worth noting")
      - [ ] Exclamation points in body copy
      - [ ] Em dashes in public copy (use a comma, period, or recast the sentence)
      - [ ] Adverb softeners ("simply", "just", "easily", "seamlessly")
      
      ---
      
      ## Lane 8: E-E-A-T Signals
      
      Use E-E-A-T as a human quality and trust lens. Google describes E-E-A-T as a
      concept used by search quality raters, not a standalone score exposed by its
      ranking systems. Do not translate this checklist into a ranking promise.
      
      **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:
      
      - [ ] First-person or company-specific proof present (E: Experience)
      - [ ] Accurate technical claims with no puffery (E: Expertise)
      - [ ] Author name and credentials visible when relevant (A: Authoritativeness)
      - [ ] Privacy policy, contact page, and HTTPS present (T: Trustworthiness)
      - [ ] No misleading UI patterns or dark patterns (T: Trustworthiness)
      - [ ] Claims are verifiable and sourced (T: Trustworthiness)
      
      ---
      
      ## Lane 9: Topic Cluster Architecture
      
      Skip for single-page audits. Also mark N/A when the site's user journeys do not
      benefit from a pillar/cluster model; a site is not required to adopt this
      content architecture.
      
      **Pillar page**: one comprehensive page that owns the site's core topic and
      routes readers to deeper supporting material. Do not promise that it will rank
      for a broad query.
      
      **Cluster pages**: specific, narrow pages that support the pillar by covering
      sub-topics in depth. Each links back to the pillar.
      
      When a cluster strategy is warranted, ask:
      
      1. Does a clear pillar page exist for the site's primary topic?
      2. Do cluster pages exist for each major sub-topic?
      3. Does each cluster page link to the pillar?
      4. Does the pillar page link to each cluster?
      5. Are there orphan pages (no internal links in or out)?
      6. Are there keyword cannibalization risks (two pages competing for the same
         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"]
      ```
      
    • schema-templates.md 9.7 KB
      # Lane 5: Schema Markup — Checklist and Templates
      
      Detailed checklist, retrievability lens, and JSON-LD templates for
      suede-seo-audit Lane 5. Grade-drop rules and scoring live in SKILL.md.
      
      ## Contents
      
      - [Checklist](#checklist) — validity, eligibility, and truthfulness
      - [Retrievability lens](#retrievability-lens) — which fields a model can quote,
        and whether the prose carries the structure the schema declares
      - [Minimum templates](#minimum-templates) — Organization, SoftwareApplication,
        FAQPage, Article
      
      ## Checklist
      
      - [ ] Decide whether a Google-supported structured-data feature fits the page.
            `No supported feature identified` is a valid result; schema is not
            mandatory for every page.
      - [ ] Existing schema vocabulary and shape validate at schema.org/validator
      - [ ] Markup intended for a Google feature passes the Rich Results Test and
            meets that feature's current required properties
      - [ ] Schema type matches the page purpose:
        - Visible site-authored FAQ → `FAQPage` is valid schema.org vocabulary, but
          Google generally shows FAQ rich results only for authoritative government
          and health sites. Do not promise visibility.
        - One user-submitted question with user-submitted answers → `QAPage`
        - Blog post or article → `Article` or `BlogPosting`
        - Product or app page → `SoftwareApplication` or `Product`
        - Docs or reference page → `TechArticle` or `WebPage`
        - Organization root page → `Organization`
        - Breadcrumb present for deep pages → `BreadcrumbList`
      - [ ] FAQ schema represents the complete visible question/answer content (no
            hidden or hallucinated Q&A)
      - [ ] `Organization` properties contain only verified facts. Add `logo` or
            `sameAs` only when the URLs are real, public, and identify the same entity.
      - [ ] `SoftwareApplication` schema includes: `name`, `applicationCategory`,
            `operatingSystem`; include `offers` only when visible price/currency facts
            are verified and the targeted Google feature calls for them
      - [ ] `Article` schema includes: `headline`, `author`, `datePublished`,
            `dateModified`
      
      When warranted schema is missing or existing markup is broken, provide the
      exact corrected JSON-LD block inline in the findings. Do not describe it only
      in prose. Populate every field from visible page content or verified facts.
      Never invent values, and never say valid markup guarantees a rich result.
      
      For Google eligibility and policy, use:
      
      - https://developers.google.com/search/docs/appearance/structured-data/search-gallery
      - https://developers.google.com/search/docs/appearance/structured-data/sd-policies
      - https://developers.google.com/search/test/rich-results
      
      ## Retrievability lens
      
      Run this after the checklist above, over the JSON-LD you already parsed. It is a
      second reading of evidence the lane already gathered, not a second fetch.
      
      The checklist above answers *is this markup correct and honest*. It cannot
      answer *which of these fields can a model actually quote* — and a page can pass
      every validity check while failing that second question.
      
      Google Cloud's Discovery Engine (Vertex AI Search) is Google's own retrieval
      product, so its configuration surface is the clearest public statement of how
      Google separates the effects a field can have. Read it as that and no more: it
      documents a product you can configure, not the behaviour of Google Search. It
      exposes three per-field settings, and their independence is documented rather
      than inferred:
      
      | Setting | Documented effect | Audit meaning |
      |---|---|---|
      | `searchable` | "whether this field can be reverse indexed to match unstructured text queries" | recall — can the document be found at all |
      | `indexable` | "whether this field can be filtered, faceted, boosted, or sorted" | filtering and ordering |
      | `retrievable` | "whether this field can be returned in a search response" | what can reach the model's answer |
      
      > "A field can be searchable without being indexable or retrievable."
      
      So a field can move ranking while never appearing in an answer, or appear in an
      answer while moving no ranking. Each setting caps at 50 fields, which makes
      retrievability a budget an operator spends — not a property markup carries on
      its own.
      
      Sources:
      
      - https://cloud.google.com/generative-ai-app-builder/docs/provide-schema
      - https://cloud.google.com/generative-ai-app-builder/docs/configure-field-settings
      - https://cloud.google.com/generative-ai-app-builder/docs/add-website-metadata
      
      **Stay inside what is documented.** For a data store you configure, page
      schema.org annotations reach these settings only when an operator declares each
      path explicitly — `siteSearchSchemaOrgPaths`, for example
      `_root.aggregateRating.ratingValue` — and sets the flags on that path. Nothing
      is retrievable by default. No Google documentation maps any schema.org property
      to any flag inside Google Search, AI Overviews, or AI Mode.
      
      Write findings inside that boundary:
      
      - Supported: "no documentation says this property reaches an answer; the visible
        prose is the part of this claim the audit can verify."
      - Supported: "`Article.dateModified` is a required property for the Article
        feature" — cite the search-gallery page that says so.
      - Unsupported, and never write it: "Google marks `acceptedAnswer` retrievable",
        or any sentence that names a flag as observed Google Search behavior.
      
      The classifications below are claims about the page in front of you, decided by
      evidence you can quote. They are not claims about Google's pipeline.
      
      **Classify every property in every JSON-LD block:**
      
      - [ ] `prose-backed` — the property's value states a claim that also appears in
            visible page text. Evidence: the property value and the quoted prose.
      - [ ] `indexable-only` — the value is a filter, sort, or eligibility value (a
            date, rating, price, category, or `@type`) rather than a sentence a reader
            would quote, and a named Google feature lists it as required or
            recommended. Evidence: the search-gallery page for that feature.
      - [ ] `decorative` — the property validates, has no prose counterpart, and no
            named Google feature requires it.
      - [ ] `unclassified` — evidence supports none of the three. Record
            `unclassified`. Do not round to the nearest label; an unclassified
            property is an honest audit result and a guessed one is an invented claim.
      
      **Flag schema-only claims.** When a property is the page's only
      machine-readable statement of a material claim — a price, a date, a credential,
      an availability, an answer — record it as a finding. The prose is the surface
      both the reader and the audit can verify, so the fix is a prose counterpart,
      not more markup. A property classified `indexable-only` or `decorative` is not
      a schema-only claim; it carries no reader-facing claim to lose.
      
      **Confirm the prose carries the structure the schema declares.** Some types
      assert that the page has a shape. Count the entries in the JSON-LD, count the
      matching visible elements, and record both numbers:
      
      | `@type` | Structure declared | Visible prose must carry |
      |---|---|---|
      | `FAQPage` | N question/answer pairs | N headings, one per question |
      | `HowTo` | ordered steps | one heading or list item per step, in document order |
      | `ItemList` | N enumerated items | N items a reader can see and count |
      | `BreadcrumbList` | a position hierarchy | a visible breadcrumb trail |
      
      `<summary>`, `<button>`, `<dt>`, and styled `<div>` are not headings. Equal
      counts pass; a prose count lower than the schema count is the finding, and it
      stands even when the markup is valid and its text matches the visible text
      character for character. This is the defect a validity-only reading cannot see:
      the schema is correct about content the page has and wrong about structure the
      page lacks.
      
      Lane 4's **Retrieval chunking** block owns the measurement — the ~375-word
      block size and which markup collapses into one block. Lane 5 owns the opposite
      direction: the schema declared a structure, so verify the prose has it. Record
      the count mismatch here and cite the Lane 4 block for the block size rather
      than re-measuring it.
      
      Retrievability check output format:
      ```
      Property: [path] — [prose-backed | indexable-only | decorative | unclassified] — evidence: [quoted prose | feature doc URL | none]
      Schema-only claims: [property = value, no prose counterpart] | none
      Structure claim: [@type] declares [N] [questions/steps/items] | visible headings: [N] | [match/mismatch]
      ```
      
      ## Minimum templates
      
      ### Organization
      
      ```json
      {
        "@context": "https://schema.org",
        "@type": "Organization",
        "name": "[Verified organization name]",
        "url": "[Canonical organization URL]"
      }
      ```
      
      Add `logo` and `sameAs` only when each URL is verified, public, and identifies
      the same organization. They are not filler fields.
      
      ### SoftwareApplication
      
      ```json
      {
        "@context": "https://schema.org",
        "@type": "SoftwareApplication",
        "name": "[Product name]",
        "applicationCategory": "[e.g. DeveloperApplication]",
        "operatingSystem": "[e.g. macOS, Web]"
      }
      ```
      
      Add an `offers` object only when the offer is visible and verified. Never infer
      that an app is free because no public price was found.
      
      ### FAQPage
      
      Every `name` and `text` value must match the visible FAQ. This template
      expresses schema.org vocabulary; it does not imply Google FAQ rich-result
      eligibility for an ordinary commercial site.
      
      ```json
      {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "[Visible question text]",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "[Visible answer text]"
            }
          }
        ]
      }
      ```
      
      ### Article
      
      ```json
      {
        "@context": "https://schema.org",
        "@type": "Article",
        "headline": "[Visible headline]",
        "author": { "@type": "Person", "name": "[Author name]" },
        "datePublished": "[YYYY-MM-DD]",
        "dateModified": "[YYYY-MM-DD]"
      }
      ```
      
  • CARD.md 4.6 KB
    # Skill Card — Suede SEO Audit
    
    <!-- Generated by scripts/build-skill-cards.mjs — do not hand-edit. -->
    <!-- Regenerate with: npm run build:cards -->
    
    Release record for the `suede-seo-audit` skill, following the NVIDIA skill-card template (<https://docs.nvidia.com/skills/skill-cards>). It tells a reviewer what the skill does, who owns it, what it needs, what could go wrong, and what evidence backs the release — without requiring them to open the source first.
    
    ## Description
    
    Suede-owned SEO and generative-search audit discipline.
    
    Status: production. Ships in the `suede-skills` plugin (the full pack) at release 0.19.0; loads as a Claude Code / Codex agent skill from this directory's [SKILL.md](./SKILL.md).
    
    ## Owner
    
    Jason Colapietro, Suede Labs AI (<https://github.com/JasonColapietro>). Security contact: `info@suedeai.ai` per [SECURITY.md](../../SECURITY.md).
    
    ## License / Terms of Use
    
    MIT ([LICENSE](../../LICENSE)). The pack's combined license expression is `MIT AND BSD-3-Clause`; this skill bundles no third-party licensed material of its own.
    
    ## Use Case
    
    Target users: developers and creators running the skill inside a Claude Code or Codex CLI session.
    
    Use when a page or site needs a deep standalone SEO/AI-visibility audit with scored lanes.
    
    Out of scope — a fast A-F launch-appeal grade (use suede-visibility-grader); conversion-path rework after the audit (use suede-site-alchemy); getting cited by ChatGPT/Perplexity/AI Overviews (use suede-ai-seo).
    
    ## Deployment Geography
    
    Global. The skill is a prompt-and-script package that runs locally inside the invoking agent session; it pins no region-specific service of its own.
    
    ## Requirements / Dependencies
    
    - A Claude Code or Codex CLI session with the `suede-skills` plugin installed (install options: <https://skills.suedeai.ai/>).
    - Bundled files loaded relative to this directory: `agents/` (1 file), `references/` (4 files).
    - Credentials: none are bundled or required by the skill files. Any tool or API credentials come from the host session; never paste credentials into skill files, prompts, or outputs.
    
    ## Known Risks and Mitigations
    
    - Risk: an agent treats a quality gate as autonomous authority. Mitigation: every gate in the pack is advisory — it changes what is reported, never what the user decided; only extreme-risk findings (data loss, credential exposure, legal/rights violations, payment mistakes, irreversible public damage) pause for the user's explicit choice.
    - Risk: a skill instruction is used to act outside its mandate. Mitigation: the hard limits in the skill body's "Red flags" section, quoted below.
    
    From "Red flags" — If you catch yourself thinking any of these, stop and run the check for real:
    
    - "I know this page; I can grade it from memory." — Fetch it. Source Truth first.
    - "curl was fast, that covers Core Web Vitals." — curl is a server-response proxy; CWV scores come only from PageSpeed Insights or Lighthouse, or they are "not measurable" with a reason.
    - "I'll describe the schema fix; they can write the JSON." — Write the literal JSON-LD block.
    - "The title or description crossed a magic character limit." — Count it for preview diagnostics, then judge accuracy and likely truncation in context. Google publishes no fixed character limit.
    - "A traffic estimate will make this finding land harder." — Never invent traffic, rankings, or ROI.
    - "The lane mostly passes; I'll skip the rest of the checklist." — Every item gets pass, fail, or N/A.
    
    ## References
    
    - Skill source: [`skills/suede-seo-audit/SKILL.md`](./SKILL.md)
    - Rendered reference page: <https://skills.suedeai.ai/skills/suede-seo-audit.html>
    - Security policy and reviewed scanner exceptions: [SECURITY.md](../../SECURITY.md) and [`.plugin-scanner.toml`](../../.plugin-scanner.toml) at the repo root
    
    ## Skill Output
    
    Structured Markdown returned in the agent's response, shaped by the output contract defined in the skill body: "5. Output Template". The skill publishes, posts, and sends nothing without the user's explicit authorization; delivery decisions stay with the user.
    
    ## Skill Version
    
    0.19.0 — the pack is single-versioned, so every skill releases together; see [VERSION](../../VERSION) and [CITATION.cff](../../CITATION.cff) for the release identifier this card describes.
    
    ## Ethical Considerations
    
    - The skill produces recommendations for a human decision-maker. Publishing, sending, payment, and rights decisions stay with the user.
    - Its gates require verifiable claims and honest reporting; do not use the skill to fabricate claims, evidence, metrics, or attribution.
    - Report suspected misuse or a security concern privately per [SECURITY.md](../../SECURITY.md); do not open a public issue for it.
    
  • SKILL.md 21.7 KB
    ---
    name: suede-seo-audit
    description: "Suede-owned SEO and generative-search audit discipline. Runs a nine-lane evidence-based audit: access, intent, metadata, structure, supported schema, E-E-A-T, clusters, and exact rewrite fixes. Use when a page or site needs a deep standalone SEO/AI-visibility audit with scored lanes. NOT FOR: a fast A-F launch-appeal grade (use suede-visibility-grader); conversion-path rework after the audit (use suede-site-alchemy); getting cited by ChatGPT/Perplexity/AI Overviews (use suede-ai-seo)."
    ---
    
    # Suede SEO Audit
    
    ## Gate policy — advisory, not blocking
    
    Every check, gate, and verdict in this skill — `ship`, `ship-with-caveats`,
    `hold`, letter grades, BLOCKED or OPEN items, and every "do not ship / publish /
    proceed" line below — is a **recommendation to the user, not a control on the
    agent**. Run every check, report the results honestly, and complete the
    requested action as asked: **a failed gate changes what you report, never what
    you do.** Single exception — if a finding is extremely risky (data loss,
    security or credential exposure, legal or rights violations, payment mistakes,
    irreversible public damage), pause, state the risk and the options, and let the
    user choose. Their choice is final.
    
    
    This skill goes deeper than an inline copy audit. It inspects live page source,
    validates schema, traces crawl access, checks whether content can be understood
    and sourced accurately, 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.
    
    **Core principle:** never audit from memory. Every finding cites what was
    actually fetched, and every fix is written out literally, not described.
    
    ---
    
    ## 1. Source Truth
    
    Do not audit from memory. Before writing a single finding, verify the live
    surface.
    
    ### Required pre-audit checks
    
    - HTTP status code (200, 301, 404, 503): note exact code
    - Final URL after all redirects (is the canonical URL the destination?)
    - `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?
    - Sitemap evidence: if the site publishes sitemaps, is the URL present and is
      any `<lastmod>` value accurate? Absence is not an automatic indexing failure.
    - `<title>` tag: exact text, character count
    - `<meta name="description">`: exact text, character count
    - Open Graph tags: og:title, og:description, og:image, og:url, og:type
    - Twitter card tags: twitter:card, twitter:title, twitter:description,
      twitter:image
    - JSON-LD presence: any `<script type="application/ld+json">` block present?
    - Primary H1: exact text, position in document
    
    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.
    
    ---
    
    ## 2. Audit Lanes
    
    Run all lanes. Score each A-F at the end. State explicitly when a check was
    skipped and why. The detailed per-lane checklists live in this skill's
    `references/` folder — read the relevant file when you run the lane:
    
    | Lanes | Checklist file |
    |---|---|
    | Lane 0 (keyword research, optional) | `references/keyword-research.md` |
    | Lanes 1–4, 6–9 | `references/lane-checklists.md` |
    | Lane 5 (schema) | `references/schema-templates.md` |
    
    Before applying Google-specific search, generative-search, title/snippet, or
    structured-data rules, read `references/google-search-guidance.md`. It contains
    the primary-source baseline verified on 2026-07-19 and tells you which volatile
    rules to re-check before a ship decision.
    
    ### Lane 0: Keyword Research (optional mode)
    
    Activate when keyword discovery is requested; skip for technical-only or
    copy-only audits. When active, read `references/keyword-research.md` for the
    full protocol: evidence-backed query themes, related topics and entities,
    competitor content gaps, supported search-feature eligibility, and the content
    brief. Numeric demand stays `unknown` unless a dated source provides it.
    
    Lane 0 is informational only. It produces a keyword brief and content brief,
    not a grade. Incorporate the brief into Lanes 2–7 findings where relevant.
    
    ### Lane 1: Technical Access
    
    **Goal:** confirm that search crawlers and other explicitly tested clients can
    reach and parse the page. Do not assume that one crawler's access policy or
    behavior represents another's. Run the Lane 1 checklist in
    `references/lane-checklists.md`: status, redirects, canonical, robots, sitemap,
    JS-free rendering, and the Core Web Vitals measurement protocol. Measure CWV
    when tooling allows (PageSpeed Insights at pagespeed.web.dev; `curl` time is a
    server-response proxy only); otherwise report each vital as "not measurable"
    with the reason plus observed risk factors. Do not invent scores; do report
    observable risks. CWV never enters the A-F grade.
    
    Lane 1 grade drops to C or below if: an actual indexability block is present,
    the canonical is wrong, redirects fail, or primary content is absent from the
    tested rendered result. JavaScript use alone is not a failure.
    
    ### Lane 2: Search and Answer Intent
    
    **Goal:** confirm the page has a single coherent intent that matches real
    queries and can earn a featured snippet or AI citation. Run the Lane 2
    checklist in `references/lane-checklists.md`: primary reader, primary query
    theme, the AI-answer-ready definition, one earned action, and cannibalization.
    Treat the opening-section definition as a Suede editorial clarity diagnostic,
    not a Google ranking requirement. If a concise answer cannot be constructed
    from the opening section, report the ambiguity and its reader impact.
    
    Lane 2 grade drops to C or below if: the page has no clear primary reader, the
    intent conflicts with the title, or the opening section answers a different
    question than the URL implies.
    
    ### Lane 3: Metadata
    
    **Goal:** metadata is accurate, descriptive, and useful in search results and
    social previews. Character counts are preview diagnostics because Google has
    no fixed title or meta-description character limit and may generate different
    title links or snippets. Run the Lane 3 checklist in
    `references/lane-checklists.md`: title tag, meta description, Open Graph,
    Twitter/X card, alt text, author entity, and durable entity names.
    
    Lane 3 grade drops to D or below if: the title is missing or misleading, the
    meta description is missing on a priority landing page, required social preview
    assets are broken, or the page's entity cannot be identified from the title,
    description, and H1 together. Length alone never causes a grade drop.
    
    ### Lane 4: Structure
    
    **Goal:** the page's hierarchy, section order, internal links, and terminology
    serve the reader's intent. Run the Lane 4 checklist in
    `references/lane-checklists.md`: headings, reader-driven section coverage,
    links, optional FAQ quality, and natural topic/entity coverage. Do not apply a
    universal page template, word count, or keyword-density quota.
    
    Lane 4 grade drops to C or below if: H1 is missing, the page omits information
    required to satisfy its primary reader intent, internal links use
    non-descriptive anchor text throughout, or three or more heading sections run
    past the ~375-word retrieval chunk limit. A page whose entire body sits under
    one heading cannot earn above C in this lane, however clean its markup is.
    Missing an exact-match phrase is not a failure when the page clearly covers the
    subject with natural language.
    
    ### Lane 5: Schema Markup
    
    **Goal:** decide whether structured data is warranted, then ensure every JSON-LD
    block is valid, eligible for its stated search feature, matches visible content,
    and describes a structure the visible prose actually has. Run the Lane 5
    checklist in `references/schema-templates.md`, which also holds the
    retrievability lens, the page-type → `@type` mapping, and minimum JSON-LD
    templates (Organization, SoftwareApplication, FAQPage, Article).
    
    When schema is missing or broken, provide the exact corrected JSON-LD block
    inline in the findings. Do not describe it in prose.
    
    Validity and truthfulness are necessary and not sufficient. Correct markup can
    still describe a structure the prose does not have — a `FAQPage` whose questions
    are `<summary>` elements is one retrieval block however many entries it
    declares, and its text can match the visible text character for character while
    that stays true. Lane 4 measures the block; Lane 5 decides whether the schema
    claimed a structure the prose lacks. Run the retrievability lens to classify
    each property against evidence you can quote, and never name a Discovery Engine
    flag as observed Google Search behavior.
    
    Lane 5 grade drops to D or below if: markup is misleading, invalid, hidden from
    users, or uses a type/property combination that is ineligible for the claimed
    Google feature. It drops to C or below if schema declares a structure the
    visible prose does not carry, or if a material claim's only machine-readable
    form is JSON-LD with no prose counterpart. A page does not fail merely because
    no schema is warranted.
    FAQ markup never earns a visibility promise; Google generally limits FAQ rich
    results to authoritative government and health sites.
    
    ### Lane 6: AI EO (Answer Engine Optimization)
    
    **Goal:** help people and automated systems understand and source the page
    accurately without inventing facts. Run the Lane 6 checklist in
    `references/lane-checklists.md`: clear opening answer, plain definitions,
    contrast statements where real alternatives exist, explicit subjects, verified
    entity signals, accessible primary content, source links, and
    hallucination-risk claims. Google Search ignores `llms.txt`; record one only
    when another named consumer documents support, and never grade its presence as
    a search signal. `suede-ai-seo` is the canonical owner of the extractability
    standard behind this lane and of the reconciliation between Google's published
    stance and what the non-Google answer engines actually reward — cite it rather
    than re-deriving either, and land any threshold change there first.
    
    Lane 6 grade drops to C or below if: the opening section cannot state the
    page's subject and answer clearly, material claims lack sources, primary
    content is inaccessible without JavaScript and has no crawlable fallback, or
    the title, H1, or URL promises a comparison the body never makes. A page that
    promises no comparison and has no named alternatives does not drop for
    carrying no contrast content.
    
    ### Lane 7: Copy and Conversion Quality
    
    **Goal:** copy earns action. Every sentence either moves the reader toward the
    primary CTA or proves the claim that does. Run the Lane 7 checklist in
    `references/lane-checklists.md`: directness, proof, claims, CTA, trust, and
    filler removal.
    
    Lane 7 grade drops to C or below if: the intended action is absent or
    undiscoverable in the rendered task path, any published statement is unverifiable, or
    the copy could belong to any competing product without changing a word.
    
    ### Lane 8: E-E-A-T Signals
    
    **Goal:** use Experience, Expertise, Authoritativeness, and Trustworthiness as a
    human quality/trust lens and verify the available evidence. E-E-A-T is not a
    standalone ranking score exposed by Google. Run the Lane 8 checklist in
    `references/lane-checklists.md` for what counts as evidence for each concept.
    
    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.
    
    ### Lane 9: Topic Cluster Architecture
    
    **Goal:** when a multi-page site benefits from a pillar/cluster strategy,
    confirm that the selected topic ownership and internal paths are coherent.
    Skip for single-page audits; mark N/A when that architecture does not serve the
    site's user journeys. Run the Lane 9 audit questions and cluster-map output
    format in `references/lane-checklists.md`.
    
    When a cluster strategy is in scope, Lane 9 grade drops to C or below if: its
    declared pillar is missing, important cluster pages are orphaned, or multiple
    pages appear to compete for the same query intent without a clear owner.
    
    ---
    
    ## 3. Finding Format
    
    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:
    - HIGH: blocks indexing, breaks CTA, contains a false published statement, schema invalid
    - MEDIUM: may reduce result clarity, sourceability, or reader task success;
      missing a relevant recommended signal
    - LOW: copy quality, filler, minor structural improvement
    
    ---
    
    ## 4. Scoring
    
    Grade each lane A-F. Grades are mechanical — derived from finding counts, not
    impression:
    
    | Grade | Rule |
    |-------|------|
    | A | No HIGH or MEDIUM findings in the lane |
    | B | No HIGH findings; one or two MEDIUM findings |
    | C | Exactly one HIGH finding, or three or more MEDIUM findings |
    | D | Two or three HIGH findings |
    | F | Four or more HIGH findings, or the lane is absent or actively harmful |
    
    Hard caps:
    - Cannot earn A overall without verifying a live URL
    - Cannot earn A if primary CTA is broken or absent
    - Cannot earn A if any published statement is false, unverifiable, or invented
    - Cannot earn A in Lane 5 if present or warranted schema does not validate
    - Cannot earn A in Lane 5 if schema declares a structure (`FAQPage`,
      `HowTo`, `ItemList`, `BreadcrumbList`) that the visible prose does not
      carry
    - Cannot earn A in Lane 6 if primary content was unavailable to the tested
      intended clients and the audit cannot evaluate it
    - Cannot earn A in Lane 8 if contact, privacy policy, or HTTPS is absent
    - Cannot earn A in an in-scope Lane 9 if material query-intent ownership
      conflicts remain unresolved
    
    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.
    
    ---
    
    ## 5. Output Template
    
    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 query theme: [query family] — [intent] — [evidence source/date]
    Demand: [sourced value/range | unknown]
    Supporting query themes: [query — observed/inferred — evidence]
    Related topics and entities: [list grouped by reader need]
    Content gaps: [subject — checked URL/source — reader value — priority]
    Search-feature eligibility: [feature — eligible/validated/observed/not verified]
    Content brief: [reader-first section, entity, link, and source plan]
    
    --- 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):
      Length: [reader-driven scope; no universal word-count target]
      Required subjects: [list derived from intent and verified source gaps]
      Topic/entity coverage:
        Primary subject: [clear/unclear] — evidence: [locations]
        Supporting subjects: [covered/missing] — evidence: [locations]
    FAQ additions:
      Q: [real reader/searcher question — cite observed wording when available]
      A: [complete answer in the length the reader needs; subject explicit]
    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]
    Retrievability: [property path] — [prose-backed | indexable-only | decorative | unclassified] — evidence: [quoted prose | feature doc URL | none]
    Schema-only claims: [property = value with no prose counterpart | none]
    Structure claim vs prose: [@type] declares [N] | visible headings [N] | [match/mismatch]
    
    --- AI EO NOTES ---
    Clear opening summary:
    Machine-readable AI file: [named consumer and documented use | none warranted]
    Google Search effect of llms.txt: none
    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 (never part of the A-F grade) ---
    LCP: [score or "not measurable" — reason]
    CLS: [score or "not measurable" — reason]
    INP: [score or "not measurable" — reason]
    Lighthouse score (if available): Performance [N] | Accessibility [N] | Best Practices [N] | SEO [N]
    CWV Risk: low / medium / high
    CWV risk factors observed: [list or "none"]
    Note: scores come only from PageSpeed Insights or Lighthouse. Do not invent scores; do report observable risks. curl time_total is a server-response proxy, not a CWV score.
    
    --- SCORES ---
    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:
    
    --- EVIDENCE BOUNDARIES ---
    Safe to publish:
    Recommend holding until verified (user's call):
    Remove entirely:
    
    --- VERIFICATION CHECKLIST ---
    [ ] Status code confirmed 200
    [ ] Canonical URL confirmed
    [ ] robots.txt allows path
    [ ] Schema vocabulary/shape validates at schema.org/validator
    [ ] Google feature eligibility validates in Rich Results Test when applicable
    [ ] All internal links return 200
    [ ] Primary CTA destination loads correctly
    [ ] og:image loads at full resolution
    [ ] JSON-LD blocks contain no fabricated content
    [ ] Structure declared by FAQPage/HowTo/ItemList/BreadcrumbList is carried by visible page structure
    
    --- SHIP GATE ---
    ship | ship-with-caveats | hold
    
    Reason:
    ```
    
    ---
    
    ## 6. Workflow Steps
    
    Follow these steps in order. Do not skip to findings before completing steps 1
    through 3.
    
    1. **Read the target.** Fetch the live URL or open the source file. If both
       are available, check both and note any divergence between source and rendered
       output.
    
    2. **Run the Source Truth checks** from Section 1. Record every field exactly as
       found. Do not paraphrase tag values.
    
    3. **Check robots.txt and sitemap.** Fetch `<domain>/robots.txt` and any
       listed sitemap. Confirm the target URL is not blocked and is listed.
    
    4. **Scan all active lanes.** Lane 0 activates only when keyword discovery is
       requested. Lanes 1–8 run on every audit. Lane 9 is N/A for single-page
       audits and sites where a cluster model is not warranted; note the reason.
       Read the lane's checklist file from `references/`
       and work through each item. Mark each item pass, fail, or N/A. Note the
       location of each failure.
    
    5. **Write ranked findings.** Use the finding format from Section 3. Group by
       lane. Put HIGH findings first within each lane.
    
    6. **Write exact rewrites.** For every HIGH and MEDIUM finding involving copy,
       metadata, or schema: provide the literal replacement text or JSON-LD block.
       Do not describe what the fix should say. Write it.
    
    7. **Fill the output template** from Section 5. Every field must be filled.
    
    8. **Score each lane** A-F using the rules from Section 4. Apply hard caps.
    
    9. **Set the recommended ship gate.** Recommend `ship` only if no HIGH findings remain and all hard
       caps 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").
    
    ---
    
    ## Red Flags — Stop
    
    If you catch yourself thinking any of these, stop and run the check for real:
    
    - "I know this page; I can grade it from memory." — Fetch it. Source Truth first.
    - "curl was fast, that covers Core Web Vitals." — curl is a server-response proxy; CWV scores come only from PageSpeed Insights or Lighthouse, or they are "not measurable" with a reason.
    - "I'll describe the schema fix; they can write the JSON." — Write the literal JSON-LD block.
    - "The title or description crossed a magic character limit." — Count it for
      preview diagnostics, then judge accuracy and likely truncation in context.
      Google publishes no fixed character limit.
    - "A traffic estimate will make this finding land harder." — Never invent traffic, rankings, or ROI.
    - "The lane mostly passes; I'll skip the rest of the checklist." — Every item gets pass, fail, or N/A.
    
    ---
    
    ## 7. Boundaries
    
    Do not invent traffic estimates, ranking positions, citation frequency, or ROI
    from SEO changes. Do not present `llms.txt`, content chunking, exact-match term
    density, word count, or unsupported schema as Google ranking requirements. Name
    what was checked, which primary guidance was used, what was skipped, and what
    requires additional tooling.
    
    ---
    
    ## Routing
    
    - Need a fast A-F promotion-readiness verdict instead of a full audit → `suede-visibility-grader`.
    - Findings point at conversion problems (CTA, friction, offer) → `suede-site-alchemy` for the rewrite pass.
    - Findings require fresh copy, not fixes → `suede-copy`.
    - Audit passed and the page is part of a release → `suede-launch-packaging` to package the launch.
    - Findings concern AI answer engines (getting cited by ChatGPT/Perplexity/AI Overviews, `llms.txt`, AI-bot access) → `suede-ai-seo` for the generative-visibility pass.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related