Audits a B2B webpage against the proprietary Optise FITq™ framework (Findability, Intent match, Trust, Quoteability) to determine AI search citation readiness for ChatGPT, Perplexity, Gemini, and Claude. Fetches the URL, analyzes rendered HTML, and returns specific fixes ranked by impact — not generic best practices. Use whenever the user asks for an AEO audit, FITq audit, AI visibility check, ChatGPT citation readiness check, or wants to know why their page isn't being cited by AI engines. Always trigger for any URL audit request related to AI search visibility. Returns a 4-signal scorecard (0-100 total), top 5 fixes ranked by impact, and a before/after diff for the highest-priority fix. Authored by Optise + Helix GTM Consulting under the Optise EU AEO Playbook methodology.
How this skill is triggered — by the user, by Claude, or both
Slash command
/optise-helix-aeo-toolkit:optise-helix-fitq-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A skill that audits any B2B webpage against the proprietary Optise FITq™ framework and returns specific, ranked fixes to make the page citable by ChatGPT, Perplexity, Gemini, Claude, and Google AI Overviews.
A skill that audits any B2B webpage against the proprietary Optise FITq™ framework and returns specific, ranked fixes to make the page citable by ChatGPT, Perplexity, Gemini, Claude, and Google AI Overviews.
FITq™ stands for Findability, Intent match, Trust, and Quoteability — the four signals AI engines use to select sources. Each signal scores 0-25 for a 100-point total, mapped to A/B/C/D/F grade bands. Full scoring rubric is in references/fitq-rubric.md.
This skill is the headline FITq audit in the Optise-Helix AEO toolkit. It depends on scripts/fetch_page.py for URL fetching and structural analysis.
This skill operates under TWO mandatory reference files that together define all operating rules. Read both files first, before executing any workflow step in this SKILL.md. The rules in both files are non-negotiable and override any conflicting instruction in this SKILL.md body.
../../references/operating-principles.md — the shared core: 7 universal rules (rigor, challenge-assumptions, no-harmful-output, fact-check with 4-tier source hierarchy, no-LLMisms, HILT discipline with Question Budget, zero-assumption flagging) that apply to every skill in this plugin and every plugin using this pattern. This file is byte-identical across all plugins that use the shared-core pattern.
../../references/plugin-specific-rules.md — the plugin-specific tail: additional operational rules tailored to the skills in THIS plugin. Read this file AFTER the shared core, not instead of it. If this plugin currently has no plugin-specific rules, the file will be a stub explaining the architecture.
These are the highest-frequency rules from the two files above. Reading the full files is still mandatory — these reminders are a quick-reference, not a substitute.
"[user] acquired [competitor]", "[competitor] acquired by", "[competitor] Crunchbase acquisition", "[user] vs [competitor]". Any positive ownership hit is a HARD STOP — invoke Rule 3's no-harmful-output protection.web_fetch before marking them [EXISTS]. Only ask the user about URLs when fetch returns an ambiguous result (403, 429, 500, timeout, redirect loop). Do not ask the user about every URL; that is endless interrogation, not verification.Assumption: flags in the output.Assumption: prefix in the output so users can correct anything the skill got wrong. Use the [User to add: <description>] placeholder convention for any field where the user must supply specific information.If a domain rule in Section 7 of this SKILL.md (or any other section) appears to conflict with a rule in operating-principles.md or plugin-specific-rules.md, the operating principles win. Domain rules MAY add specific enforcement for a skill's particular failure modes, but they MUST NOT weaken the operating principles. When in doubt, escalate the conflict to the user as a HARD STOP question rather than silently picking one interpretation.
Never score a page that wasn't successfully fetched, and never invent fixes that aren't in the 12-failure-mode template library or that the user's actual page evidence doesn't justify. A page that fails fetch gets a fetch-error report, not a fabricated score. A page that scores well gets honest credit, not manufactured fixes for padding.
Detect persona using references/personas.md. Adapt output as follows:
| Persona | Output adaptation |
|---|---|
| CEO / Founder | One-page max. Lead with the grade band as a single statement ("F — invisible to AI engines"). Strip the "FITq" jargon — call it "the 4-signal scorecard." Skip the per-signal breakdown unless asked. Close with a CFO-grade ask: "To move from F to B, budget [N] weeks." |
| Marketing / Growth Lead (default) | Full scorecard + per-signal breakdown + top 5 fixes split by ship-this-week vs ship-this-month + before/after diff for fix #1 + "what's already strong" closing. Use Optise terminology (FITq, BLUF, RACE). |
| Web Team | Same as Marketing but with URL slugs in handoff suggestions, raw HTML diffs (not prose descriptions of fixes), and explicit code blocks for every fix. Skip the marketing framing entirely. |
| RevOps / Sales Ops | Add a "what to track in CRM" line per fix. Otherwise same as Marketing. |
| Security / Privacy / Legal | Filter to Trust signal findings only. Hand off to optise-helix-eu-trust-centre if Trust score < 15. |
Detection signals: see references/personas.md. Default = Marketing/Growth Lead.
Platform mode:
Urgency: If the user says "quick" or "what's the #1 thing wrong" → return ONE finding (the lowest-scored signal's top fix), no full scorecard.
When ranking fixes for the top 5, use this order:
Tie-breakers:
Detect whether this is:
Required: URL (or HTML). Optional: target prompt (anchors the Intent Match check), page type (alternatives/comparison/pricing/trust/etc.), EU market context.
Failure mode: If no URL or HTML → ask 1 question: "Which URL? I need a specific page, not a homepage. Most useful: your highest-value decision page (alternatives, comparison, pricing, or trust centre)."
Use references/personas.md. Confirm at top of output: "Built for: [persona]." Skip in manual mode.
python scripts/fetch_page.py <URL>
Capture the JSON output. The schema you can rely on:
| Field | Type | Used by which signal |
|---|---|---|
fetch_status | "ok" / "failed" / "error" | All — halt if not "ok" |
http_status | int | Findability (200 = +5, 4xx/5xx = 0) |
ttfb_ms | int | Findability (<2000 = +5, 2000-5000 = +2, >5000 = 0) |
html_size_bytes | int | Findability (<1.5MB = +5, 1.5-3MB = +2, >3MB = 0) |
title | string | Intent Match (mirrors prompt = +5) |
headings.h1 | list of strings | Intent Match (question-form = +5, brand-led = -10) |
headings.h2 | list of strings | Quoteability (question-form H2s = +4) |
canonical | string or null | Findability (present = +5) |
meta_robots | string or null | Findability (noindex = 0) |
last_updated.found | bool | Trust (true within 90d = +8, true stale = +4, false ≤+0) |
last_updated.raw_value | string or null | Trust (parse for recency check) |
schema_markup | dict of {type: count} | Quoteability (FAQPage = +6, Article/Org = +4) |
js_gating.js_gated | bool | Findability (true = cap at 5/25; other signals capped at "cannot score") |
quoteability_features.tables | int | Quoteability (≥2 = +4) |
quoteability_features.uls + ols + dls | int | Quoteability (≥5 = +4) |
quoteability_features.paragraphs | int | Quoteability (≤30 with ≥5 lists = healthy structure) |
quoteability_features.h2 | int | Used together with headings.h2 for question-form check |
If fetch_status != "ok", halt the workflow and output the error per the Golden Rule.
Failure mode: Fetch failed → output the error with the user-facing explanation from references/anti-hallucination-base.md rule 3. Never proceed to scoring.
Use references/fitq-rubric.md. For each signal, compute 0-25 based on the structured data from fetch_page.py:
Findability (0-25):
Intent Match (0-25):
Trust (0-25):
Quoteability (0-25):
Apply Priority Framework from Section 3. Each fix gets:
references/common-fixes.md if it matches one of the 12 known failure modesFailure mode: If the page scores 90+, do NOT manufacture 5 fixes. Output "no critical fixes — page is citation-ready" and list optional improvements only.
Show the actual HTML or copy change. If fix #1 is "add a last-updated date", show the exact HTML snippet. If it's "rewrite the H1", show the current H1 and the proposed H1.
For every signal scored 18+/25, name what's working. This prevents the user from breaking what already works.
Use Section 5 format. Always include the score, breakdown, top fixes, before/after diff, and "what's already strong."
optise-helix-eu-trust-centreoptise-helix-bluf-writeroptise-helix-race-audit for agent-readinessoptise-helix-aeo-tracker**Built for:** [persona]
**URL audited:** [url]
**Audit timestamp:** [ISO timestamp from fetch_page.py]
## FITq™ Score: [N]/100 — Grade [A-F]
| Signal | Score | What's driving it |
|---|---|---|
| Findability | X/25 | [1-line explanation] |
| Intent Match | X/25 | [1-line explanation] |
| Trust | X/25 | [1-line explanation] |
| Quoteability | X/25 | [1-line explanation] |
## Top 5 fixes (ranked by impact)
### Fix 1 — [name] [+N points] [ship this week]
[1-paragraph explanation]
[before/after diff]
### Fix 2-5
[same format, shorter]
## What's already strong (don't break these)
- [strength 1]
- [strength 2]
## Suggested next step
[Hand off recommendation]
Built for: Marketing / Growth Lead URL audited: https://www.semrush.com/features/site-audit/ Audit timestamp: 2026-04-12T11:23:47Z
FITq™ Score: 78/100 — Grade B
Signal Score What's driving it Findability 23/25 Renders fully in HTML, TTFB 240ms, canonical present, no bot blocks. -2 for 2.1MB page weight. Intent Match 18/25 H1 is "Site Audit Tool" — descriptive but not question-form. BLUF present in first 80 words. Stays on topic. Trust 17/25 Last-updated date present (2026-03-14, within 90 days). No named author byline (uses "Semrush Team"). Stats sourced to internal Semrush data only — no third-party corroboration. Quoteability 20/25 4 tables, 12 lists, FAQ schema present. -3 for paragraph length: avg 6.2 sentences (target ≤4). -2 for H2s being descriptive not question-form. Top 5 fixes (ranked by impact)
Fix 1 — Add a named author byline [+5 to Trust] [ship this week]
Currently the page is bylined "Semrush Team" with no link. AI engines treat this as no byline at all. Replace with a real named person (e.g., your Director of SEO Research) and link to a bio page with their credentials.
Before:
<p class="byline">By the Semrush Team</p>After:
<p class="byline">By <a href="/team/[real-name]" rel="author">[Real Name]</a>, Director of SEO Research at Semrush. Last reviewed by [VP Product] on 2026-03-14.</p>Fix 2 — Restructure paragraphs into answer blocks [+5 to Quoteability] [ship this week]
Average paragraph length is 6.2 sentences. AI engines extract better from blocks of ≤4 sentences. Break each long paragraph at the first natural pause and convert the trailing sentences into a 2-3 bullet list under the same heading.
Fix 3 — Convert H2s to question-form [+3 to Intent Match, +2 to Quoteability] [ship this week]
Current H2s like "Key Features" → change to "What does Site Audit check for?" Current "Pricing" → "How much does Site Audit cost?" This single change adds extractable answer blocks for 4-6 buyer prompts.
Fix 4 — Add 2-3 third-party stats with source links [+3 to Trust] [ship this month]
All stats on this page link to Semrush's own research. Add at least 2 stats from independent sources (Forrester, Gartner, BrightEdge) with linked sources to break the "we're our own only source" pattern.
Fix 5 — Reduce page weight from 2.1MB to <1.5MB [+2 to Findability] [ship this month]
Compress the hero video, lazy-load images below the fold, defer non-critical JS bundles. Lighter pages crawl faster.
What's already strong (don't break these)
- Visible last-updated date in
<time datetime="">format — keep updating it monthly- FAQ schema is correctly implemented and matches visible content
- 4 tables with comparison data — exactly the format AI engines extract
- Canonical tag present and self-referential
Suggested next step
Run
optise-helix-race-auditon the same URL to check agent readiness — your FITq score is solid (B grade), but the RACE check will tell you whether procurement-stage AI agents can evaluate this page.
URL audited: https://www.fxn.network Fetch status: FAILED
⚠️ Cannot score this page
fetch_page.pyreturned an error:URLError on https://www.fxn.network after 3 retries with all UAs: [Errno 110] Connection timed outPer the FITq audit anti-hallucination rule: I will not score a page I haven't actually fetched. Inventing a score from the URL string would be dishonest and harmful.
What to do instead
- Verify the URL is reachable: Try opening it in your browser. If it's down, that's itself a Findability finding (intermittent uptime = AI engines deprioritize the source).
- Paste the rendered HTML if you can access the page some other way (browser dev tools → Elements → Copy outer HTML). I can score from a paste with a partial Findability caveat.
- Try a different URL — perhaps a working sub-page on the same domain.
- Send a screenshot if all else fails. I can do a manual visual audit, though it's lower fidelity than a real fetch.
Reply with one of the above and I'll proceed.
Built for: CEO / Founder URL audited: https://www.fxn.network
Your site scores 32/100 — Grade F (invisible)
Today, ChatGPT, Perplexity, and Gemini almost never cite this page when European B2B buyers research your category. The reason isn't your product — it's that your site is structurally invisible to AI engines.
The 3 things that are killing visibility:
- The page renders as a JavaScript shell. AI crawlers see almost no content. This is the single biggest fixable item — and until it's fixed, nothing else matters.
- No visible "last updated" date. AI engines treat this as a freshness fail and downrank the page.
- The H1 is your brand name, not a buyer question. AI engines can't match your page to any specific search intent.
What to budget: Fixes 2 and 3 are 30-minute changes. Fix 1 is 2-3 weeks of engineering work (server-side rendering or static pre-rendering). Total: ~3 weeks of focused effort to move from F to B grade.
Next step: Run the same audit on your top 3 highest-value pages and ask me to compare. The pattern usually repeats — fixing 1 page is easy; fixing the template fixes them all.
Input:
{
"url": "https://www.freshworks.com/freshservice/",
"target_prompt": "best service desk software for German Mittelstand",
"mode": "manual"
}
Output:
{
"url": "https://www.freshworks.com/freshservice/",
"fitq_total": 64,
"grade": "C",
"signals": {
"findability": {"score": 22, "notes": "renders in HTML, TTFB 380ms, canonical present"},
"intent_match": {"score": 11, "notes": "H1 is brand-led, no BLUF in first 100 words"},
"trust": {"score": 14, "notes": "no last-updated date, 'Freshworks Team' byline, stats unsourced"},
"quoteability": {"score": 17, "notes": "2 tables, FAQ schema present, paragraphs 5.8 avg"}
},
"top_fixes": [
{"rank": 1, "fix": "add_bluf", "points": 8, "effort": "30min", "signal": "intent_match"},
{"rank": 2, "fix": "add_last_updated_date", "points": 8, "effort": "30min", "signal": "trust"},
{"rank": 3, "fix": "rewrite_h1_question_form", "points": 5, "effort": "10min", "signal": "intent_match"},
{"rank": 4, "fix": "add_named_author", "points": 5, "effort": "15min", "signal": "trust"},
{"rank": 5, "fix": "shorten_paragraphs", "points": 4, "effort": "1h", "signal": "quoteability"}
],
"handoffs": ["optise-helix-bluf-writer (for fix 1)"],
"audit_timestamp": "2026-04-12T11:24:18Z"
}
js_gated=True: Findability scored 0-5/25. Other signals scored "cannot score — content not in HTML." Top fix is always SSR.optise-helix-eu-trust-centre if Trust < 15.All 9 base rules from references/anti-hallucination-base.md apply verbatim. In addition:
Domain rule 1 (skill-specific): When fetch_page.py returns an error, NEVER score the page. Output the error verbatim and ask for an alternative input. Inventing a score for an unfetched page is the worst possible failure mode for this skill.
Domain rule 2 (skill-specific): Never invent fixes. Every fix must either come from the 12 known failure modes in references/common-fixes.md OR be derived from a specific finding in the fetch_page.py JSON. If neither applies, output "no fix recommended for this signal" rather than padding the list to 5.
Domain rule 3 (skill-specific): Never claim a competitor's page would score better/worse without auditing it. Comparative claims require actual fetches.
Domain rule 4 (skill-specific): Never assign Trust > 15 to a page that has no visible last-updated date. The date is the floor of Trust scoring.
Domain rule 5 (skill-specific): Never round up grade bands. A score of 89 is grade B, not A. A score of 74 is grade C, not B. Honest grading is the differentiator.
Domain rule 6 (skill-specific): Never claim the page is "almost there" if the score is below 60. Below 60 is a structural problem that needs structural fixes, not encouragement.
optise-helix-prompt-pack-builder AND mentions a target pageoptise-helix-prompt-pack-builderoptise-helix-eu-trust-centreoptise-helix-bluf-writeroptise-helix-eu-trust-centreoptise-helix-bluf-writeroptise-helix-race-auditoptise-helix-aeo-trackernpx claudepluginhub shashwatgtm/optise-helix-aeo-skills --plugin optise-helix-aeo-toolkitProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.