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
Install
npx skills add https://github.com/JasonColapietro/suede-creator-skills/tree/main/skills/suede-seo-audit
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install jasoncolapietro-suede-creator-skills@llmmart
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? IsDisallow: /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.
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.
Run the Source Truth checks from Section 1. Record every field exactly as found. Do not paraphrase tag values.
Check robots.txt and sitemap. Fetch
<domain>/robots.txtand any listed sitemap. Confirm the target URL is not blocked and is listed.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.Write ranked findings. Use the finding format from Section 3. Group by lane. Put HIGH findings first within each lane.
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.
Fill the output template from Section 5. Every field must be filled.
Score each lane A-F using the rules from Section 4. Apply hard caps.
Set the recommended ship gate. Recommend
shiponly if no HIGH findings remain and all hard caps are met.ship-with-caveatsif only MEDIUM or LOW findings remain and no claim is false.holdif 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-alchemyfor the rewrite pass. - Findings require fresh copy, not fixes →
suede-copy. - Audit passed and the page is part of a release →
suede-launch-packagingto package the launch. - Findings concern AI answer engines (getting cited by ChatGPT/Perplexity/AI Overviews,
llms.txt, AI-bot access) →suede-ai-seofor 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.
Reviews (0)
No reviews yet.
No comments yet.