agentsclimarketplace

Seo sxo

Skill PIXARTSeu/Synapse/packages/codegraph/data/skill/seo-sxo

Self-improving AI brain for Claude Code & Desktop — 28 MCP tools, 253 skills, collective memory, project tracking, work logs. One server, all your sessions share the same knowledge. Deploy on Coolify in 2 minutes.

Install
npx -y skills add PIXARTSeu/Synapse --skill seo-sxo

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Search Experience Optimization — the SEO×UX×CRO overlap. Reads the SERP backwards to detect page-type mismatch, derives user stories from intent signals, scores a page from multiple persona perspectives, and fixes engagement/page-experience problems (dwell, pogo-sticking, CWV) that block ranking even on technically perfect pages. Includes a 0-100 SXO gap rubric with falsifiability checks and Next.js patterns. Use when the user says "SXO", "search experience", "page type mismatch", "intent mismatch", "why isn't my page ranking", "pogo-sticking", "dwell time", "engagement signals", "conversion-aware content", "persona scoring", or "SERP analysis". Triggers on: SXO, search experience optimization, page-type mismatch, intent mismatch, pogo-sticking, dwell time, engagement signals, persona scoring, SERP backwards analysis, conversion-aware SEO, page experience.

SKILL.md

16.1 KB, ~3.8k tokens by cl100k_base, as published. Nobody here has run it

Search Experience Optimization (SXO)

SXO sits where SEO (what the engine rewards), UX (what the visitor needs), and CRO (what the business needs) overlap. A page only "wins" when all three are satisfied in one pass: the searcher lands, immediately recognizes they're in the right place, gets the answer, and converts — without bouncing back to the SERP.

Technical SEO asks "is the page healthy?". SXO asks a harder question: "Does this page deserve to rank for this query, given what the engine is actually rewarding, and does it satisfy intent end-to-end so the searcher never returns to results?"

Core insight: the page-type trap

A page can score 95/100 on technical SEO and still never rank because it is the wrong page type for the query. If the top 10 results are 8 product pages and 2 comparison tables, a blog post will not break through — no matter how clean its schema or how fast its LCP. Page-experience and content quality are necessary but not sufficient; format-intent alignment gates everything else.

This is why SXO is scored separately from the technical SEO health score. A page can be 95 technical + 30 SXO: perfectly built, strategically misaligned.

Two modes

  1. Audit — score a page's search experience, detect mismatch, emit ranked falsifiable fixes (the methodology below).
  2. Implement — apply the Next.js patterns to fix the engagement, page-type, and conversion-readiness gaps the audit surfaces.

For meta/JSON-LD/feeds see seo-technical; for content depth & E-E-A-T see seo-content; for AI-search surfaces see seo-geo.


The engagement loop (the signal SXO actually optimizes)

query → click → [land] → dwell? → satisfied? → task done
                  │                     │
                  └── pogo-stick ───────┘  (back to SERP, click next result)
  • Pogo-sticking — user returns to the SERP within seconds and clicks a competitor. Strong negative signal. Causes: intent mismatch, slow/janky load, hidden answer, intrusive interstitials, wrong page type.
  • Dwell time — time between click and return. Long dwell + no return = task satisfied. Not a documented direct ranking factor, but a leading indicator of the satisfaction the engine does reward.
  • Last-click wins — the result that ends the session is the one the engine learns to trust for that query. SXO's job: be the last click.

Methodology (audit)

Step 1 — Acquire the target

Fetch the rendered DOM, not raw HTML — search experience is about what the visitor actually sees, and JS often produces the above-the-fold content (use your own headless crawler / Playwright; force a render so above-fold analysis matches reality). Extract: page type, title, H1, meta description, heading hierarchy, word count, schema types, primary CTA(s), media (img/video/interactive), and the above-the-fold content block. If no keyword is given, infer the primary keyword from the title∩H1 overlap and validate it is non-empty.

Step 2 — Read the SERP backwards

Run the query (your SERP source of choice; note reduced precision if you only have generic web search). For the top 10 organic results record:

  • domain authority tier (brand / niche authority / unknown)
  • page type (see taxonomy below)
  • content format (long-form, listicle, how-to, comparison, tool, video)
  • depth estimate, schema signals, media signals

And the SERP furniture (each is a free intent signal):

  • featured snippet format (paragraph / list / table / video)
  • People Also Ask — capture every question
  • ads top/bottom — count + copy themes (reveals commercial triggers)
  • related searches (reveals the journey before/after)
  • knowledge panel / local pack / shopping / AI Overview + its source types

SERP consensus: dominant page type (>60% = strong, 40-60% = mixed, <40% = fragmented), depth norm (avg word-count tier), expected schema, media expectation.

Step 3 — Page-type mismatch detection (the lead finding)

Classify the target with the same taxonomy and compare to consensus. If a mismatch exists, lead with it — it dwarfs every other fix.

Page-type taxonomy (classify by dominant signal):

TypeTells
Informational / blogprose, explanatory H2s, no purchase CTA
Comparisonmatrix/table of N options, "vs", "best X for Y"
Product / PDPsingle SKU, price, add-to-cart, specs
Category / listinggrid of items, filters, faceted nav
Tool / calculatorinteractive input → output
Landing / serviceone offer, lead CTA, proof blocks
LocalNAP, map, hours, location signals

Mismatch severity & fix:

TargetSERP expectsSeverityFix
BlogProduct/CategoryCRITICALBuild a dedicated product/category page; keep blog as supporting link
BlogComparisonHIGHRestructure as comparison + decision matrix
ProductInformationalHIGHAdd an educational/explainer layer above the buy block
LandingTool/CalculatorHIGHBuild the interactive tool component
ServiceLocal packMEDIUMAdd location signals + LocalBusiness schema (seo-technical)
MatchALIGNEDCompete on depth, page-experience, and conversion clarity

If the SERP is fragmented (no dominant type), that's a differentiation opportunity — the format is up for grabs.

Step 4 — Derive user stories from SERP signals

Every SERP element encodes a need. Convert clusters into stories (3-5, covering ≥2 journey stages — awareness/consideration/decision). Each story must cite the signal that produced it (no invented personas).

As a [persona from signal],
I want to [goal from query intent],
because [driver from ad copy / PAA tone],
but I'm blocked by [barrier from PAA / related searches].
SignalReveals
PAA questionsknowledge gaps, objections
Ad copy themescommercial triggers, value props
Related searchesthe journey (before/after)
Featured-snippet formatexpected answer shape
AI Overviewwhat the engine treats as definitive

Step 5 — Gap analysis → 0-100 SXO score

Score the target across 7 dimensions (lower total = larger gap). Give specific evidence for each — never a bare number.

DimensionComparePts
Page-type fittarget type vs SERP dominant0-15
Content depthword count, heading depth, topic coverage vs norm0-15
UX / above-folddoes the answer + intent confirmation appear in the first viewport? CTA clarity, mobile layout0-15
Schemapresent vs expected structured-data types0-15
Media richnessimages/video/interactive vs SERP norm0-15
Authority (E-E-A-T)author, credentials, social proof, citations0-15
Freshnesslast-updated, date signals, recency0-10

Total = SXO Gap Score /100 — reported alongside, never merged into, the technical SEO health score.

Step 6 — Persona scoring

Derive 4-7 personas by clustering PAA by theme, segmenting ad copy by audience, and mapping related searches to journey stages. Score each persona on 4 axes (25 pts each):

  • Relevance — does the page address this persona's need?
  • Clarity — can they find the answer in ≤10 seconds (the dwell test)?
  • Trust — enough proof for this persona to believe it?
  • Action — is there a clear, persona-appropriate next step?

Output one card per persona; sort fixes weakest-persona-first (biggest lift).

Step 7 — IST/SOLL wireframe (only on request)

Generate a current-state (IST) outline from the parsed DOM and a target-state (SOLL) outline matching SERP consensus + gap + persona findings. Use ultra-concrete placeholders, never vague ones:

  • NO: "add a CTA here"
  • YES: "add pricing CTA with annual-savings badge below the hero, linking to /pricing#enterprise"

Emit as a semantic HTML section outline with annotations.


Falsifiability — how would we know each fix failed?

SXO recommendations are hypotheses about behavior. Every fix ships with a leading indicator (moves in days/weeks) and a failure condition. If the indicator doesn't move, the hypothesis was wrong — revert or rethink, don't pile on more changes.

FixLeading indicatorFailure condition (revert/rethink)
Resolve page-type mismatchimpressions appear for the query cluster within 2-4 wks (GSC)still zero impressions after re-index + 4 wks → wrong type or topical authority gap
Lift answer above the foldscroll-to-answer depth ↓; SERP return-rate ↓bounce/return-rate flat → answer wasn't the blocker (intent mismatch?)
Cut INP / fix layout shiftINP <200ms, CLS <0.1 (field, p75)field metrics unchanged after 28-day window → lab-only win, real users unaffected
Add proof for weak personaconversion rate for that segment ↑CR flat → trust wasn't the barrier; re-score relevance/clarity
Strengthen CTA clarityCTA click-through ↑CTR flat → wrong offer or wrong page-type, not wording
Tighten title/meta to match snippet formatorganic CTR ↑ in GSCCTR flat/down → snippet promised something the page doesn't deliver

Rule: one change per hypothesis where feasible, so a moved (or unmoved) indicator is attributable.


Page experience as a Core Web Vitals problem (current thresholds)

Page experience is the UX leg the engine can measure directly. Field (CrUX) p75 targets — INP replaced FID in March 2024:

MetricGoodWhy it's an SXO lever
LCP< 2.5sslow hero → pogo-stick before the page even paints
INP< 200msjanky taps after load → frustration, abandon
CLS< 0.1content jumping → mis-taps, lost trust

CWV are a tiebreaker among relevant results, not a substitute for relevance — fix intent first, then page experience. Implementation lives in seo-technical; SXO just demands the field numbers as a gate before declaring an experience "good".


Next.js patterns (implement)

Put the intent-confirming answer in the first viewport (RSC, no client JS)

The single biggest dwell lever: the searcher must confirm "right page" instantly. Render the answer block server-side, above any heavy/interactive content.

// app/[locale]/[slug]/page.tsx — RSC, answer-first layout
export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params;
  const page = await getPage(slug);
  return (
    <article>
      {/* Above the fold: directly satisfies the query, no scroll, no JS needed */}
      <header className="mx-auto max-w-3xl pt-10">
        <h1 className="text-3xl font-semibold tracking-tight">{page.h1}</h1>
        {/* The "answer in 10 seconds" block — the dwell/pogo-stick defense */}
        <p className="mt-3 text-lg text-muted-foreground">{page.answer}</p>
        {page.primaryCta && (
          <a href={page.primaryCta.href} className="mt-6 inline-flex h-11 items-center rounded-md bg-primary px-6 font-medium text-primary-foreground">
            {page.primaryCta.label}
          </a>
        )}
      </header>
      {/* Defer heavy/interactive depth below — never block first paint */}
      <PageBody blocks={page.blocks} />
    </article>
  );
}

Defer non-critical interactivity to protect LCP/INP

Keep the above-fold static; lazy-load comparison tables, calculators, embeds.

import dynamic from "next/dynamic";

const ComparisonMatrix = dynamic(() => import("@/components/ComparisonMatrix"), {
  loading: () => <div className="h-64 animate-pulse rounded-lg bg-muted" />,
});

Eliminate CLS on hero media (intrinsic dimensions + priority)

import Image from "next/image";

<Image
  src={hero.src}
  alt={hero.alt}          // descriptive alt = relevance + a11y
  width={1200}
  height={630}            // reserve space → CLS 0
  priority                // hero is the LCP element → preload
  sizes="(max-width: 768px) 100vw, 768px"
/>;

Conversion-aware metadata: make the snippet a promise the page keeps

CTR is an SXO signal too — but only if the title/description match what the page delivers, in the snippet format the SERP rewards. Mismatched promises raise CTR then spike pogo-sticking, which is worse than a lower CTR.

// app/[locale]/[slug]/page.tsx
import type { Metadata } from "next";

export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
  const { slug } = await params;
  const p = await getPage(slug);
  return {
    title: p.metaTitle,                         // mirrors the H1 promise
    description: p.metaDescription,             // states the concrete payoff, no clickbait
    alternates: { canonical: `/${slug}` },
    openGraph: { title: p.metaTitle, description: p.metaDescription },
  };
}

Match the featured-snippet format with structured markup

If the SERP rewards a list/table snippet, give the answer that shape and back it with the matching schema (FAQPage, HowTo, Product) — see seo-technical for the JSON-LD helpers. The format must exist in the DOM, not just the schema.

Don't sabotage experience with interstitials

Intrusive interstitials (full-screen popups on load, especially mobile) are a documented demotion signal and a direct pogo-stick cause. Gate consent/marketing modals so they never cover the above-fold answer on the first interaction.


Output format (audit)

## SXO Analysis: [URL] — keyword: [keyword]

1. SERP landscape — dominant type ([confidence]%), features, depth norm, schema norm
2. Page-type alignment — your type vs expected → ALIGNED | MISMATCH (severity) + impact
3. User stories (3-5, each citing its source signal)
4. Gap analysis — SXO Gap Score XX/100 (7-dimension table with evidence)
5. Persona scores (4-7 cards, weakest first)
6. Page-experience gate — LCP/INP/CLS field p75 vs thresholds
7. Priority actions — mismatch first, then weakest-persona gaps; each with a
   leading indicator + failure condition
8. Limitations — what couldn't be assessed; data-source precision note

Cross-skill handoffs

FindingHand off to
E-E-A-T / depth gaps in scoringseo-content
Missing/format-mismatched schemaseo-technical (or seo-schema)
Local intent in the SERPseo-geo / local handling
CWV / crawl / index issues during fetchseo-technical
AI Overview as dominant surfaceseo-geo

Quality checklist

  • Target fetched as rendered DOM (above-fold matches what users see)
  • ≥5 SERP results classified with the taxonomy
  • Mismatch severity rated and led with if present
  • Every user story cites a specific SERP signal
  • Persona scores include concrete, persona-specific fixes
  • SXO Gap Score labeled separate from technical SEO health
  • CWV field thresholds applied as a gate (LCP<2.5s, INP<200ms, CLS<0.1)
  • Every fix carries a leading indicator + failure condition
  • Limitations section present and honest

Parts adapted from claude-seo (MIT, © 2026 agricidaniel).

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.