Pulse dashboard
Plans: Starter (view only) · Growth · Pro · Agency
Pulse is Clione's standalone scanner: it reads any storefront page, detects which SEO / AEO / GEO / AI-readiness signals are present, grades them A–F, and stores the result so you can track trends over time.
Pulse works on any storefront — your own, your competitors', any ecommerce site. It does not require a Clione integration. The signals it scores are the same ones Clione enriches and propagates, so the score doubles as a measure of how well your enrichment work is landing.
You can run Pulse from three places:
- The dashboard (this page) — for tracked sites and ad-hoc scans.
- The Chrome extension — for one-click scans while browsing — see Pulse Chrome extension.
- The public page at
https://app.clione.ai/p/<hostname>— share a score without requiring login.
Where it lives
Sidebar → Pulse.
The dashboard has four tabs:
- Overview — aggregated stats: total scans, average score, grade distribution, platform breakdown, recent scans list.
- Sites — scans grouped by hostname. One row per unique site, with its latest score, scan count, and a sparkline of historical scores.
- Scans — the raw scan log, newest first. Filterable + sortable.
- Setup — generate an API key for the Chrome extension and copy your API URL.
What gets scanned
For each URL, Pulse checks:
| Group | Signal |
|---|---|
| SEO basics | <title> length + presence, <meta description> length + presence, canonical URL, robots meta, hreflang. |
| Structured data | JSON-LD blocks: Product, Organization, BreadcrumbList, FAQPage, Article. |
| OpenGraph | og:title, og:description, og:image, og:type, og:url. |
| AI-readiness / AEO | LLM-friendly markers: clear semantic HTML, structured FAQs, alt text on images, /.well-known/llms.txt, agent-discovery headers. |
| GEO | Geographic / language signals: lang attribute, hreflang variants. |
| Performance proxies | Cache-Control, Content-Security-Policy, X-Robots-Tag. |
| Clione adoption | Does this page have Clione markers (data-clione-* attributes, Clione JSON-LD authorship)? |
Each signal is scored Pass / Warn / Fail and the page gets an overall A–F grade based on a weighted sum.
The Pulse scoring math is intentional and stable. If a page seems mis-scored to you (e.g. a feature scored as "missing" that doesn't apply to your page type — task #41 in our backlog), it's a contextualization gap we're tracking, not a scoring bug.
Per-platform notes
Pulse works on any storefront. The signals it looks for are platform-independent. It detects the underlying platform from page fingerprints (script names, cookie patterns, body-class markers) and shows the platform in a column for context.
BigCommerce stores
- Detected via the
bigcommerce-cart-eventsscript reference,<meta name="generator" content="BigCommerce">, or thebccdn.comasset hosts. - Common false-fails: BC Stencil themes that don't render
<meta description>server-side will lose the meta-description signal. The Schema Injector doesn't fix this — meta description must be authored in BC's per-page SEO fields. - Common false-fails: BC Stencil JSON-LD that's only rendered after the Clione Schema Injector script runs. Pulse marks the JSON-LD as present because it sees the marker comment, but third-party validators (Google Rich Results) won't see it unless they execute JS. See Stencil — non-JS crawlers.
Shopify stores
- Detected via
cdn.shopify.comasset hosts, Shopify session cookies, or the<meta name="shopify-checkout-api-token">tag. - Common false-fails: Shopify themes that lazy-load images often miss the
altattribute on the LCP image until JS runs. Pulse scores against the raw HTML, so it flags this. The fix is to set the alt on the product image in Shopify admin (it propagates to all themes). - Common false-fails: stores in development mode (password page) — every URL redirects to the password page, which Pulse scores against. Disable the password or pass
?password=in the URL.
WooCommerce, Magento, custom
Pulse will still run and score, but the platform-specific advice in the dashboard's "Why is my score low" sidebar won't apply. The grade is comparable across platforms — A on BC means the same as A on Shopify.
Headless storefronts (Hydrogen, Catalyst, custom Next.js)
Pulse fetches the raw HTML response from your server. Headless storefronts that fully server-render (SSR) will pass; storefronts that are client-rendered (CSR-only) will lose most signals because the raw HTML is mostly empty until JS runs. The fix is to add SSR for the meta + JSON-LD blocks. See Headless Hydrogen and Headless Next.js.
There are no per-platform install steps for Pulse itself — it's a server-side scan and an extension, neither of which touches your store.
Running scans
From the dashboard
Today, the Scans and Sites tabs are read-only views of scans pushed from the Chrome extension or the public page. There is no in-dashboard "scan this URL now" button — that flow lives in the extension.
From the Chrome extension
See Pulse Chrome extension. Every scan triggered from the extension flows back into the dashboard within seconds.
From the public page
Anyone (signed in or not) can visit https://app.clione.ai/p/<hostname> to see the latest score for a domain. If no scan exists yet, the page returns a "no score yet — run the extension" empty state. Once at least one scan exists, anyone with the URL can see the grade.
You can embed the grade badge on your own site:
<a href="https://app.clione.ai/p/example.com" target="_blank">
<img src="https://api.clione.ai/badge/example.com.svg" alt="AI Readiness score" />
</a>
Replace example.com with your hostname. The badge updates automatically as new scans come in.
Filtering and sorting
The Scans and Sites tabs both support:
- Sort by any column (score, scan date, hostname, platform, country). Default is newest first.
- Filter by platform, grade band (A–B / C / D–F), country, vertical (if classified), Clione presence (yes/no).
- Multi-select rows for bulk operations (delete, re-scan via extension queue).
The Clione column was hidden in a recent release (it was noise on the merchant-facing view); it's still in the underlying data if needed for filters.
Sharing a scan or a site
Click the share icon on any row to copy a public URL. Two variants:
- Site URL —
app.clione.ai/p/<hostname>— always shows the latest scan. - Scan URL —
app.clione.ai/p/<hostname>?scan=<id>— pinned to a specific scan, useful for "look at the score we had three weeks ago".
Both are public (no auth required) by design — they're meant to be shared with internal teams, clients, or in blog posts about AI readiness.
Adding the Pulse score to a Branded Report
When you generate a Branded Report, include the Pulse score for the URL(s) of interest. The report shows the grade, the per-signal breakdown, and (if multiple scans exist) the trend over time. This is the most common use of Pulse for agencies: a single PDF that combines enrichment depth from Clione + signal grade from Pulse.
Bulk operations on the Scans tab
Select multiple rows with the checkbox column:
- Delete — remove the scans from the dashboard. Useful for cleaning up noisy ad-hoc scans before sharing a Site URL with a client.
- Export CSV — exports the selected scans with all signals as columns.
- Compare — opens a side-by-side view of up to 4 scans, signal by signal. Handy for "did our last theme update break anything?".
Per-store scoping
If you've assigned hostnames to specific connected stores (under Store → Settings → Storefront URL), the Scans and Sites tabs show a Store column. The store filter at the top of each tab lets you narrow to scans for one store, which is the common workflow for multi-store agencies.
Hostnames not assigned to any store appear under "Unassigned" in the store filter — useful for tracking competitor scans.
Troubleshooting
Score on extension differs from score on dashboard for the same URL — Historical bug, fixed in the current release. If you still see this, capture both screenshots and ping us — it's a clue the extension shipped with an old scoring snapshot.
Scan shows "robotsBlocking: true" — The page has a robots meta tag or X-Robots-Tag header blocking crawlers. This caps the score because if crawlers can't read the page, the other signals don't matter. Fix the robots directive before re-scanning.
Sites tab is empty even after scans ran — The Sites tab groups by hostname, so a scan that returned an error never makes it into Sites. Check Scans for the same hostname — if all scans errored, fix the URL or the credentials and re-scan.
Public Pulse page for my domain shows score F even though my page looks fine — Check the Scans tab for the URL. If the most recent scan is the F, click into it for the signal breakdown. Common cause: the scan was run while the storefront was down for maintenance (returning a 503 page). Re-scan once the site is back up.
Score keeps dropping even though I haven't changed the page — Pulse's scoring model is versioned. When we ship a new version (announced in the changelog), older scans don't retroactively re-score, but new scans are scored against the new model. If you see a drop right after a release, it's likely a model bump; the relative ranking of your pages is unchanged.
Extension shows score immediately but dashboard takes several minutes — The extension renders the score from a local computation while it pushes the scan to the dashboard. The push goes through a queue. Under normal load, dashboard catches up within 5 seconds; under load, up to 60 seconds.
API access to scans
If you want to consume Pulse scans programmatically:
GET /api/v1/pulse/scans?store=:storeId&limit=50— list recent scans.GET /api/v1/pulse/scans/:scanId— single scan with full signal breakdown.GET /api/v1/pulse/sites?store=:storeId— per-site aggregate.POST /api/v1/pulse/scans— create a scan (used by the extension; also available for server-side scanning).
See developers/pulse-telemetry-api for the full reference.
Comparison: Pulse score vs Verification grade
Both Pulse and the per-entity Verification produce a grade, but they measure different things:
| Pulse score | Verification grade | |
|---|---|---|
| Scope | Any URL | Clione DB entity |
| What's checked | Signal presence + completeness | Signal presence + DB match |
| Re-scan | On extension click | Auto after every enrich/propagation, or on demand |
| History | Yes (per-URL trend) | Yes (per-entity trend) |
| Public share | Yes (Site URL) | No |
| Cross-tenant | Yes (any site, even competitors) | No (your stores only) |
| Weight model | Versioned, evolves with the platform | Static — pass/warn/fail per signal |
Use both: Verification confirms your own catalog is healthy; Pulse benchmarks you against competitors and tracks broader signal trends.
Score lifecycle and retention
| Event | Effect |
|---|---|
| Scan created | Stored, indexed, available immediately. |
| Same URL re-scanned | New scan, both kept (history). |
| Scan deleted (manually) | Removed permanently. |
| Scan older than retention window | Removed automatically. |
Retention follows your plan:
- Starter: 30 days.
- Growth: 90 days.
- Pro: 180 days.
- Agency: 365 days.
Older-than-retention scans roll off automatically. If you want to keep a specific scan past retention, export the CSV before it rolls off.
Score breakdown rules
The Pulse score is a weighted sum:
- SEO basics — 25% (title, meta description, canonical, robots).
- Structured data — 30% (JSON-LD presence + types).
- OpenGraph — 10%.
- AI-readiness — 15% (llms.txt, semantic HTML).
- Performance proxies — 10% (cache, CSP).
- Clione adoption — 10% (Clione markers — favors but doesn't dominate).
A page can max out at 100. F is everything below 50. A is 90+.
Weights are versioned. The scoring version used for any given scan is stored on the scan and visible in the detail modal's footer, so you can compare scans across model versions.