Skip to main content
OnPageIQ Documentation

Content Scans

Updated · Aug 27, 2026

Run spelling, grammar, SEO, and readability checks against project URLs.

What changed

Two changes to how scores behave and how you reach a comparison. Re-scanning a page you have not touched now lands on the same score far more often — content scoring used to sample, so an unchanged page could score 78 one day and 74 the next, and the trend showed movement nobody could explain. Pinning that moved every score once, on 24 August 2026; the trend marks that date and a comparison spanning it says so, because a one-time change on our side must not read as a change to your site. Separately, the scan comparison now has a way in: the scan results page offers "Compare with an earlier scan" whenever there is genuinely something to compare. The comparison page, its diff and its PDF export already existed and nothing linked to them, so the only way in was typing the address.

User goal

Validate page copy quality and ship fixes from actionable issue lists.

Tier
Free (spelling); Pro+ (grammar, SEO, readability)
Nav label
New Scan
Route
/scans/new
Gates

Prerequisites

  • Project with at least one URL
  • Credits available

QA focus

  • Credit reservation/refund on failure
  • Issue categories match check types
  • Scan policy blocks cross-org

Overview

Content scans run spelling, grammar, SEO, and readability checks against your project URLs as background jobs, so you can keep working while results come in.

What you get

  • A live credit estimate before you submit
  • Per-URL results with severity, filters, and context excerpts
  • Exports from the scan results page
  • Scan comparison to spot new, fixed, and unchanged issues

How it works

  • Open New Scan, pick a project, URLs, and check types
  • Submit to queue the jobs; credits are reserved per pricing rules
  • Review completed results, then optionally compare against a baseline scan

Comparing two scans

The scan results page offers Compare with an earlier scan whenever there is something real to compare against: an earlier completed scan of the same page that still has its stored result. If the button is not there, no such scan exists — a first scan, or a failed one, has nothing to sit beside.

The comparison always reads older → newer, so an improvement is never reported as a decline. You can share the link: ?baseline= on the address carries the scan you picked.

Why a score can move on a page you did not touch

Scoring used to sample, so the same unchanged page could score 78 one day and 74 the next. That is fixed — repeat scans of unchanged copy now agree far more often. It is not a guarantee of an identical number every time, and a change to the underlying model can still move a score.

Pinning it moved every score once, on 24 August 2026. The trend chart marks that date, and a comparison that spans it says so directly. Where you see that note, part of the difference is our change, not your page.

Common issues & false alarms

  • Queue stalled
  • Browsershot failures on headless env
  • A score changed but the page did not → check whether the comparison spans 24 August 2026; the page says so when it does
  • No "Compare with an earlier scan" button → this is the page's first completed scan, or the earlier one failed and stored no result

Interactive guide

Step of

All steps (reference)

  1. Step 1. Open scan creator

    Select project, URLs, and check types with live credit estimate.

    What to do: GET /scans/new

    Where: scans.create

    Open scan creator

    Expected (pass)

    • Form loads
    • Projects dropdown org-scoped only

    Negative cases (must fail safely)

    • No credits → submit disabled or error
  2. Step 2. Submit scan

    Dispatch jobs per URL; balance reserved per pricing rules.

    What to do: Submit form with 1+ URLs

    Where: scans.create

    Submit scan

    Expected (pass)

    • Redirect to scans.show
    • Status queued/processing

    Negative cases (must fail safely)

    • Invalid URL in list → validation error
  3. Step 3. Review results

    Per-URL results, filters, issue severity, and context excerpts.

    What to do: Open scans.show; expand issue row

    Where: scans.show

    Review results

    Expected (pass)

    • Completed status
    • Issues match check types enabled

    Negative cases (must fail safely)

    • Foreign scan id → 403/404
  4. Step 4. Open a comparison from the results page

    The scan results header offers "Compare with an earlier scan". It appears only when there is genuinely something to compare: an earlier completed scan of the same page that still has its stored result. On a page's first scan, or beside a failed one, there is no button rather than a link into an empty picker.

    What to do: Open a completed scan on a page that has been scanned before → click "Compare with an earlier scan".

    Where: scans.show

    Open a comparison from the results page

    Expected (pass)

    • The button appears next to Export PDF on a scan that has an earlier completed scan of the same page
    • It is absent on the page's first scan, on a failed scan, and on a scan still running

    Negative cases (must fail safely)

    • Scan still in progress → no button, and the page still loads with its progress state
  5. Step 5. Compare scans

    Diff two scans to see what is new, what is fixed, and what has not moved. The baseline list offers only scans older than the one you are viewing, so the comparison always reads older → newer and an improvement is never shown as a decline. If the two scans sit either side of 24 August 2026, a note says part of the difference is our scoring change rather than your page.

    What to do: scans.compare with baseline scan

    Where: scans.compare

    Compare scans

    Expected (pass)

    • New/fixed/unchanged issues grouped
    • Only earlier scans of the same page appear in the baseline list
    • A comparison spanning the scoring change carries the note explaining it

    Negative cases (must fail safely)

    • Baseline from other org → blocked, and indistinguishable from an id that does not exist
    • A scan id that stored no result → reported as not comparable, not an error page

Related guides