Skip to content

The full list

85 checks.Here they all are.

Grouped by pillar, in the order the report shows them, with what each one looks at — and the cases where it deliberately says nothing.

Security

Can a stranger read, hijack or impersonate this site?

49 of 85 checks

  • Content-Security-Policy

    Checks the Content-Security-Policy for one that is missing, report-only, or lets inline script — the browser's main defence against injected code.

  • Strict-Transport-Security

    Requires Strict-Transport-Security with a long max-age: the header that makes a browser refuse plain HTTP next time, which is what closes off SSL-stripping.

  • DDoS protection

    Reads the CDN and WAF fingerprints stamped on the response headers plus the hostname’s DNS chain: reports an origin that answers every request itself, and abstains when an unrecognised host sits in between.

  • Vercel hosting security

    On a detected Vercel deployment: asks whether its own project files answer at a URL, what its edge cache did to a response that sets cookies, and whether it is served from Vercel’s shared domain.

  • Netlify hosting security

    On a detected Netlify deployment: asks whether its own project files answer at a URL, what its CDN cache did to a response that sets cookies, and which of Netlify’s automatic deploy hosts is answering.

  • Cloudflare hosting security

    On a Cloudflare-fronted site: asks whether its .dev.vars secrets or Wrangler config answer at a URL, what its edge cache did to a response that sets an application cookie, and whether a Cloudflare-issued address is serving it.

  • Clickjacking protection (X-Frame-Options / frame-ancestors)

    Reports a missing or ineffective frame-ancestors / X-Frame-Options, which lets any other site drop this page into an invisible iframe and clickjack the visitor.

  • X-Content-Type-Options

    Checks X-Content-Type-Options is set to nosniff; without it browsers guess at response types and an uploaded file can begin running as script.

  • Referrer-Policy

    Checks Referrer-Policy — absent is flagged, and a policy that sends full URLs to every site you link to is flagged harder.

  • Permissions-Policy

    Reports no Permissions-Policy, which leaves embedded third-party frames free to ask the browser for camera, microphone and geolocation.

  • TLS certificate expiry

    Severity scales with how close the TLS certificate is to expiring. An expired one is critical: browsers refuse the site outright.

  • TLS protocol version

    Checks the TLS version a modern client can negotiate. TLS 1.1 or older means the server offers nothing current browsers accept.

  • HTTP → HTTPS redirect

    Flags pages reachable over plain HTTP, and port-80 responses that serve content instead of redirecting straight to HTTPS.

  • Cookie security flags

    Checks Secure, HttpOnly and SameSite on cookies the scanned response sets. Names only — cookie values are never read or sent anywhere.

  • CORS policy

    Reads the page response's Access-Control headers and reports a wildcard, or a wildcard paired with credentials, which lets any origin read what comes back.

  • Anonymous access to protected pages

    Asks six of the site's own admin, API and debug paths for a page as a stranger, probes the routes its own JavaScript names, and reports open doors, walkable ids and bulk JSON lists — shapes only, never the records.

  • CSRF protection on state-changing forms

    Reads the forms the scanned pages serve and reports a state-changing one that carries no anti-CSRF token as a field, meta tag, cookie or action parameter.

  • Mixed content

    On HTTPS pages, finds scripts, styles, images or form targets still pointed at http://, which browsers either block or ship unencrypted.

  • Server header disclosure

    Reports Server headers that reveal an exact product version, which narrows an attacker's search to the exploits written for that version.

  • X-Powered-By disclosure

    Reports X-Powered-By, X-AspNet-Version and X-Generator stack banners; a version in the value counts for more than a bare product name.

  • security.txt

    Requests /.well-known/security.txt and reports one that is missing, expired, answers as HTML, or carries no contact — the address researchers try first.

  • SPF record

    Checks the domain SPF record: missing, duplicated, ending in +all, or past the 10-lookup limit, each of which leaves anyone able to send as the domain.

  • DMARC record

    Checks _dmarc.<domain> for a record that is missing, invalid or p=none — spoofing unenforced, or enforced with no reporting address to see it happen.

  • DKIM signing keys

    Queries a curated list of common selector names for revoked keys and test-mode flags. Finding nothing at those selectors is never reported as "DKIM is absent".

  • CAA record

    Climbs the CAA records from host to registrable domain. With none published, any certificate authority may issue for the domain.

  • Domain registration expiry

    From registry (RDAP) data, reports a domain expired or expiring within 30 days — a lapsed domain takes the website and every mailbox on it down.

  • Domain registry state

    From the same registry record: no transfer lock or a transfer in progress, DNSSEC delegation versus a signed zone, and served nameservers against the ones the registry delegates to.

  • Subdomain takeover

    Reads the zone's own CNAME chains from DNS and reports names that point at a resource nobody holds any more — the record an attacker claims next.

  • Exposed sensitive files

    Requests a fixed list of paths like .env and .git files, and reports only those that answer with content that genuinely matches what they should be.

  • Secrets in JavaScript

    Scans the page's inline scripts and its own downloaded bundles for known credential shapes — keys compiled into client-visible code.

  • Source maps

    Follows sourceMappingURL in the page's own scripts and reports maps that really download, since they hand back original source, comments and API shapes.

  • Directory listing

    Requests the folder of one asset the page actually loads and reports when the server answers with an autoindex listing of every filename in it.

  • Subresource Integrity

    Flags cross-origin scripts and stylesheets loaded without an integrity hash, so a file changed at its host would run inside the page.

  • Audit logging & monitoring exposure

    Reports the surfaces whose job is the log — the actuator index, Go pprof, Apache server-status — when they answer unauthenticated, plus the trace headers on the response.

  • Open redirect through URL parameters

    Places a reserved test host in the site's own redirect parameters and reads the Location header back without following it; also flags page JavaScript that navigates to a URL read from the address bar.

  • GraphQL endpoint protection

    Asks the site's own GraphQL endpoints three read-only questions and reports what they volunteer: an open schema, a development console, stack traces in errors or suggested field names.

  • SQL injection in query parameters

    On ownership-verified deep scans only: appends a true and two false SQL conditions to a page’s own query parameters and compares the shape of the answers. Two endpoints, GET only, nothing extracted.

  • Reflected cross-site scripting

    Appends two inert canaries to a page’s own query parameters and reads which of their characters come back unescaped, and in what part of the document. Two endpoints, GET only, nothing executed.

  • DOM-based XSS sinks fed by URL input

    Reads the page’s own JavaScript for a DOM sink — innerHTML, document.write, eval — that is fed straight from the URL fragment, a query parameter or a postMessage payload.

  • Session credentials in browser storage

    Reads the page’s own JavaScript for tokens, JWTs and API keys kept in localStorage or sessionStorage, where any script on the origin can read them back.

  • JSON Web Tokens published to anonymous visitors

    Reads the JSON Web Tokens an anonymous visitor already gets — in the page, the site’s own bundles or a crawled page — and reports their algorithms, claim names, lifetimes and where they were found. No requests.

  • JWT algorithm confusion at the site’s API

    On ownership-verified deep scans only: sends one token payload unsigned, under an alg:none header and signed with the site’s own published public key, and reports whichever the API accepts. GET only, bodies never read.

  • Tech stack & CVE

    Fingerprints the components a page loads from asset filenames, script banners and headers, matches precise detected versions against known CVEs, and names the release that fixes each one.

  • Tech stack inventory

    Lists every framework, library and platform the scan recognises and where each fingerprint came from — an inventory of what the site runs, with no findings or scoring of its own.

  • File upload content validation

    On ownership-verified deep scans only: uploads a frozen marker file through the site's own upload forms and fetches it back, reporting forms that accept it without validating content — worst when the file is served inline.

  • Webhook signature verification

    On ownership-verified scans only: delivers one frozen event twice to a webhook path the site itself names — once unsigned, once with a well-formed signature that cannot be valid — and reports a receiver that accepts either.

  • Mobile API rate limiting

    On ownership-verified scans only: sends the same GET seven times to API paths the site's own code names, and reports an endpoint that neither refuses the burst nor advertises a limit — read honestly, a small burst proves little.

  • Supabase row-level security

    Only on ownership-verified scans: asks a detected Supabase project whether its public key can read row counts. Counts and table names, never row data.

  • Firebase security rules

    Only on ownership-verified scans: asks the Firebase database, Storage bucket and site-named Firestore paths for public read or list access, and tests writes by deleting a path it proved empty.

SEO

Can a search engine crawl, understand and rank these pages?

17 of 85 checks

  • Indexing directives

    Parses every directive Google documents in the page’s robots and googlebot meta tags and the X-Robots-Tag header — not just noindex — and, on a deep scan, in the sub-pages its crawl kept.

  • robots.txt

    Checks /robots.txt for rules that block Googlebot or every crawler, a missing file, or HTML served where plain text should be.

  • XML sitemap

    Parses the sitemap robots.txt declares, or /sitemap.xml if none is, and reads it as a document — entries, hosts, dates, duplicates — then samples two URLs to see whether the list still matches the site.

  • Page title

    Checks the page title exists exactly once and sits inside the 30–60 characters a search result has room to show.

  • Meta description

    Checks the meta description behind a result snippet: missing, empty, duplicated or left as a template placeholder, outside 50–160 characters, or copying the page title.

  • H1 heading

    Reads the H1 by the name assistive tech takes from it — text, aria-label, aria-labelledby or an image’s alt — and reports it missing, nameless, hidden, or left inside a template.

  • Viewport meta tag

    Checks the viewport tag that mobile-first indexing ranks pages on, and flags the ones that switch pinch-zoom off.

  • Canonical URL

    Checks this page's canonical link — the URL you tell Google to index — for missing, empty, conflicting, http or off-site targets.

  • HTML language attribute

    Checks <html lang> the way WCAG 3.1.1 asks — that it exists, parses as one BCP 47 tag and not a locale name or template value, and matches the script the page is written in — so a screen reader loads the right voice.

  • Open Graph tags

    Reads the og: tags a shared link is previewed from on Slack, WhatsApp and LinkedIn: missing or empty values, unrendered {{ template }} syntax, URLs with no host, and one property written twice.

  • X (Twitter) card

    Only reads pages that declare a twitter:card: the type X recognises, the image, player iframe or app fields that layout needs, and tags left blank, templated, relative or without an @ handle.

  • Structured data (JSON-LD)

    Reads this page's JSON-LD blocks in full: whether each parses, declares a schema.org @context and @type, carries the properties Google lists as required for its type, and has no blank value.

  • Favicon

    Reads the icons a browser tab uses: a declared <link rel="icon"> is fetched and must answer with an image, and with none declared /favicon.ico is asked. apple-touch and mask links are reported, not judged.

  • Heading order

    Reads this page's heading outline the way a screen reader walks it — nav, header, footer, aside and search regions keep their own sequence, hidden headings hold no rank — and reports a jump down of more than one rank.

  • hreflang

    Reports only on pages that declare hreflang alternates: whether the language tags are valid, the URLs absolute, and this page is in its own set.

  • Broken internal links

    On deeper scans, follows this page's same-origin links and reports the ones that answered 404, 410 or 5xx, naming where each sits. A 4xx that only refused us is listed as information, never called broken.

  • Duplicate titles and descriptions

    On deeper scans, first reduces the sampled URLs to the pages they claim to be, then flags a title or description shared by more than one page. One page answering at several URLs is information, never a duplicate.

AI answer engines

Can an answer engine read, resolve and cite this page?

8 of 85 checks

  • Server-rendered content

    Detects a page that ships a nearly empty framework shell and fills it in the browser, which is nothing at all to a crawler that skips JavaScript.

  • AI crawler access

    Reports AI crawlers that robots.txt shuts out of the whole site, and raises severity when llms.txt on the same host invites those bots in.

  • llms.txt

    Checks /llms.txt, the plain-text guide AI crawlers read. Absence is reported as an opportunity, HTML served in its place as a defect.

  • Entity schema

    On the home page, checks for Organization or Person schema whose sameAs links tie the site to an entity assistants already recognise.

  • Answer structure

    On pages over 400 words, flags missing section headings and unbroken paragraphs — the boundaries an assistant uses to find a quotable passage.

  • FAQ and HowTo schema

    Fires only where three or more question headings or accordions exist with no FAQPage schema, so the Q&A already on the page becomes quotable.

  • Author and date

    On article pages only, checks for a machine-readable author and publication date, signals assistants weigh before citing a claim from the page.

  • Outbound citations

    On articles over 600 words, flags those with no link outside the site; assistants weigh whether a page's claims can be traced to a source.

Performance

How long does this take on a real phone, on a real network?

4 of 85 checks

  • Response compression

    Checks text responses over 2 KB arrive gzipped or brotli-compressed. Uncompressed HTML costs every visitor bytes, and slow mobile links the most.

  • Asset caching

    Fetches one content-hashed same-origin asset: a short or missing max-age means returning visitors re-download a file that cannot change without its name changing.

  • Image formats

    Counts four or more JPEG or PNG images with no WebP or AVIF offered alongside them — formats that carry the same picture at a fraction of the bytes.

  • Core Web Vitals

    Asks Google PageSpeed Insights for LCP, INP and CLS: real-user Chrome data when it exists, a simulated phone load as a lower-severity fallback, otherwise nothing.

Accessibility

Can someone using a keyboard or a screen reader get through it?

4 of 85 checks

  • Image alt text

    Lists images with no alt attribute, which a screen reader announces as a filename. A decorative empty alt is correctly exempt. Skipped when axe ran.

  • Form labels

    Reports form fields with no label or ARIA name, which a screen reader announces as blank; a placeholder does not count. Skipped when axe ran.

  • Link text

    Finds links with no accessible name and filler like "click here", which is all a screen reader's link list will read out. Skipped when axe ran.

  • Accessibility audit (axe-core)

    Runs axe-core in a real headless browser against the rendered, post-JavaScript page, so it catches computed issues like contrast. Silent when no browser tier ran.

Compliance

Does anything run before the visitor agreed to it?

3 of 85 checks

  • Tracking before consent

    Loads the page once and flags analytics or ad scripts from a fixed vendor list, or tracking cookies already set, before any consent was given.

  • Consent mechanism

    Where trackers fire, looks in the served HTML for a consent platform or banner markup. A banner that only renders in JavaScript stays invisible to this.

  • Privacy policy link

    Scans the page's links for a privacy policy by URL or by wording in several languages. Pages too sparse to be expected to carry one are skipped.

See which of the 85 yours fails.

Paste a URL and the whole list runs against it — with the measured value behind every finding and a prompt that fixes it.

Scan your site

ScanlyFix

Security, SEO and AI-answer-engine scanning for anything you put on the internet. Paste a URL, read the evidence, run the fix.

Home