The system
behind the score.
A versioned check registry, a published scoring rubric, a four-pillar reporting layer and the Shopify app they feed. Every figure on this page is read from the code that computes it.
One registry.
Every check accounted for.
Every check Rank Sniper defines lives in one versioned registry with an ID, a pillar, what it reads, a pass condition, a fix class and a source. A check moves a score only when it is independently sourced, implemented by the scanner and weighted — all three.
11 scored
Sourced, implemented and weighted. Each is proven to fail before and pass after on a test fixture. These are the checks behind today’s composite.
45 experimental
Defined with an ID, a pillar and a pass condition, but not yet computed by the scanner, so none of them touches a score. Each graduates on its own once it is implemented and proven — never in a batch.
2 informational
Ruled report-only. Shown once measured, never scored, whatever else is true of them — external corroboration is the example.
Two layers today.
One contract next.
The public composite and the four-pillar layer are computed from the same audit and reported side by side. Neither pretends to be the other.
- Composite · rubric v1.0
- 9 catalogue checks, weights summing to 95, each applied to the share of products that pass it — blended at 80% with a structured-data sub-score out of 100 (40 Product JSON-LD, 20 offers, 20 availability, 20 shipping details or return policy) at 20%. Then 6 points come off per blocked AI crawler, capped at 30, with a floor of 1.
- Pillar layer · v1.0
- 29 checks re-cut into SEO, AEO, GEO and AIO. Each pillar scores out of 100 over the checks that fed it; a check whose input could not be fetched is excluded, never scored zero. Pillars do not sum to the composite, and this layer cannot change it. AIO carries a named transactability sub-score.
- Canonical Rank Score
- In development One versioned scoring contract for all four pillars, shared by every surface. Until it ships, the two layers above are what Rank Sniper reports, labelled as what they are.
- Rank Preview
- In development SEO, AEO, GEO and AIO Preview scores and an overall Rank Preview for the free scan, each with its coverage stated, so a public number never passes for the full authenticated assessment.
Built for Shopify.
Installed through Shopify.
Rank Sniper is Shopify-only. The installed product is an embedded Shopify app. It is not yet on the Shopify App Store, and nothing in this section runs inside a store today.
Embedded app
Installed from the Shopify App Store and run inside your Shopify admin. The listing is not live yet, so there is nothing to install today.
Connected scan
Reads the catalogue through the Shopify Admin API with your permission, reaching what a public scan cannot — GTIN or MPN per variant, inventory state, dimensions. 18 registry checks depend on it.
Shopify billing
Shopify is the only billing authority for Shopify merchants. Rank Sniper subscriptions and add-ons will be billed through Shopify when the app is available; nothing is charged on ranksniperhq.com.
HQ Merchant Command
Where your report, tasks and history live. The full report requested after a free scan renders there from your real scan (Beta); store-level views run on sample data until the app sends live store data across.
A designed contract.
Not yet a running one.
How the Shopify app is designed to write. Every element below carries its release state; nothing is written to any merchant’s store today, and none has been.
- FIX-APlanned
Automatic — in Rank Sniper’s own layer
Product JSON-LD, Open Graph and an @id entity graph published through a theme app extension, from facts already in your catalogue. No native field changes. 4 of 29 pillar checks are designed this way.
- FIX-BPlanned
Assisted — native fields, on your approval
Title, description, tags, product type, SKU and other native Shopify fields are drafted and staged, then written only when you approve them, in bulk. 20 checks are designed this way.
- FIX-C
Guided — outside the app’s reach
Theme templates, sitemap configuration and root-domain files such as llms.txt sit outside the app’s write scope. Rank Sniper gives exact steps; you apply them; the next scan checks the result. 5 checks are designed this way. Ships with the fix pipeline.
- FIX-DPlanned
Allowlisted writes
The write client is designed around an allowlist — the dedicated Rank Sniper metafield namespace for automatic output, and the specific native fields an approved assisted fix names. A mutation that is not on the list is refused before it is sent.
- FIX-EPlanned
Versioned rollback
The prior value of every field is stored before it is written, with per-product restore. Designed to ship before the first automatic fix does.
After the fix.
Verify, then watch.
The part of the platform that proves a change landed and notices when it stops holding.
Verification
Re-fetches the delivered HTML after a fix — raw, without JavaScript, and as each declared AI user agent — and confirms the change reached what agents receive. Structured data injected only by JavaScript is invisible to crawlers that do not run it.
Monitoring
Scheduled re-scans, drift detection when a theme update or another app strips markup, and alerts. Today the public result offers a re-scan on demand; nothing runs on a schedule.
Version history
Score and release history in HQ, so any number can be traced to the scan and the release that produced it.
What the scan reads.
As served, without JavaScript.
Structured data and crawler access are read from what your storefront actually returns, not from what your theme settings say.
Structured data
- Up to three product pages fetched as raw HTML, with no JavaScript executed — markup a script injects later is not counted.
- Every application/ld+json block is parsed as JSON, @graph wrappers and array @type values included. Product, ProductGroup and related types are recognised.
- The composite scores Product JSON-LD, offers, availability, and shipping details or a return policy. GTIN and MPN are read but not scored in rubric v1.0.
- The pillar layer adds price with priceCurrency, FAQPage / HowTo / QAPage markup, and conflicting prices or availability on one page.
Crawler analysis
robots.txt is read first and parsed by group, with path-level matching. Rank Sniper checks which of 10 named AI user agents are fully disallowed:
- GPTBot
- OAI-SearchBot
- ChatGPT-User
- ClaudeBot
- anthropic-ai
- PerplexityBot
- Google-Extended
- Applebot-Extended
- Bytespider
- CCBot
Each blocked AI agent costs 6 composite points, capped at 30. Googlebot and Bingbot are read too and feed the SEO pillar only. The scanner obeys robots.txt itself: if RankSniperBot is disallowed, nothing else is fetched.
Every number
carries a version.
A score is only arguable if you know which rules produced it. Each layer is versioned on its own.
- Registry · v1.4-draft
- The check inventory. A check graduates to scored one at a time, only once it is implemented and proven.
- Rubric · v1.0
- The composite’s weights, blend and penalty. Any change to them requires a version bump and a re-publish of the rubric.
- Pillar layer · v1.0
- Bumped on any pillar check or threshold change.
- Launch freeze
- Not stamped yet: pre-launch, weights may still move and each change is logged. It is stamped at the first paying customer; from then, a weight change without a version bump fails the build.
Changes are recorded in the field log.
Test it on
your own store.
The scan layer described here runs now, free. The workflow page shows how the rest connects.
