seencite
πŸ”§ Fixes

Fixes

A failing check becomes a finished artifact, not a to-do. You approve it, it deploys, and the next scan re-measures. Here's exactly which parts are automatic and which aren't β€” the boundary is where most tools get vague.

1 β€” Generation

Every failing check in the audit carries a generated fix, built against your pages: Organization JSON-LD, titles and meta descriptions, canonical tags, robots and llms.txt files. They're finished output, ready to ship β€” not a description of what someone ought to do.

The one thing we won't do is invent facts. A generator can't know your real price or product name from a crawl, so those artifacts come out as templates with placeholders β€” which leads directly to the next step.

2 β€” The placeholder gate

A fix with placeholders in it cannot be deployed. Schema fixes are validated before they can go live. If an artifact still contains template text β€” an unfilled product name, a 0.00 price β€” deploy is refused with 422 and needsCompletion: true, listing the exact problems. Without that gate, one click would publish "PRODUCT NAME" and a fake price as structured fact on your live commercial pages. Structured data is a machine-readable assertion about your business; shipping a placeholder into it is worse than shipping nothing.

3 β€” Deployment: you approve, we inject

Approving a fix marks it deployed:

POST /projects/:id/fixes/:fixId/deploy   β†’ { "ok": true }

For that to reach your live site, install the snippet once. It's minted per project and only for a verified domain:

GET /projects/:id/deploy-snippet

β†’ {
    "verified": true,
    "key": "<deploy-key>",
    "snippet": "<script async src=\"https://seencite.com/i/<deploy-key>.js\"></script>",
    "appliedCount": 3,
    "appliedTypes": ["Organization JSON-LD schema", "Title + meta description (only-if-missing)"],
    "framework": "next",
    "installHint": "..."
  }

Paste it into your <head> once. From then on, every schema or meta fix you approve is applied by that script β€” additively, deduped against schema you already have, and page-specific blocks (a Product, an Article) only ever on their own page. Meta titles and descriptions are applied only if missing; we never overwrite copy you wrote on purpose. If your domain isn't verified, no key is minted and the endpoint tells you why. A wrong key is a safe no-op, not a broken page.

Where the snippet reaches β€” and where it doesn't

The snippet injects client-side, and most AI crawlers don't run JavaScript. The script builds the JSON-LD in the browser (document.createElement β†’ head.appendChild), so a crawler has to execute JavaScript to see it. Googlebot renders JS, so Google AI Overviews can pick it up via the index. OAI-SearchBot, PerplexityBot and ClaudeBot generally do not β€” that's four of our five engines that plausibly never see a snippet-injected fix. This is not a footnote; it's the difference between shipping a fix and thinking you shipped one.

So for anything beyond Google AI Overviews, paste the artifact instead. Every generated fix is available as finished output β€” put the same JSON-LD into your HTML template or your CMS and it's server-rendered, which every crawler can read without running anything. Same fix, same artifact, one extra step, and it reaches everything.

We don't get to exempt ourselves from our own check. Our audit ships a render_diff check whose stated rationale is that content appearing only after JavaScript runs may be missed entirely by crawlers that don't render. We flag that as a defect on your site. We are not going to flag it on your site and stay quiet about it in our own delivery mechanism β€” so it's written here, on the page that tells you how fixes work, rather than in a caveat you'd find later.

The other boundary, while we're here: server-side files stay copy-to-deploy. A script tag in your <head> cannot write robots.txt or llms.txt β€” those live at your server root. We generate the file; the last step is yours.

4 β€” Re-measurement

Ship the change, then re-scan. Two different numbers move, and they mean different things:

  • The GEO score confirms the fix is live. The check that failed now passes. That's the rubric doing its job β€” and it's arithmetic, not evidence about AI.
  • The mention rate, re-measured with its interval, is the only thing that could tell you AI behaviour changed β€” and only if the new band clears the old one.
What we won't tell you. We won't hand you a predicted percentage lift before you ship. The ranking of which fixes to do first is real work and we stand behind it; a decimal attached to it would be fake precision, and we'd be doing the exact thing this product exists to detect. You get the ranking, then the honest before→after.