Site audit

A site audit crawls your website and lists the technical problems it finds on each page: broken internal links, server errors, missing or duplicate titles and descriptions, thin or duplicate content, redirect chains and more. Every issue comes with an explanation and a fix. You can also run Lighthouse on a sample of pages and have pages rendered in a browser before they are checked.

Start an audit

  1. Open your project in NameIO and choose Site Audit in the sidebar, under My Site.
  2. In Start New Audit, enter the site's URL. You can leave out https://, because NameIO adds it.
  3. Set Max pages, and turn on Include Lighthouse or Render JavaScript if you want them (see the options below).
  4. Click Start Audit.

NameIO opens the new audit as soon as it starts. The audit runs in the background, so you can leave the page and come back later. If you ask for more than 500 pages, NameIO asks you to confirm first.

The URL can be any http or https address. It doesn't have to match the project's domain. NameIO's terms don't allow you to audit or crawl websites you aren't allowed to.

Before crawling, NameIO follows the start URL's redirects (up to 5) so the audit covers the site's real address, for example example.com redirecting to www.example.com. Addresses on local or private networks, such as localhost or private IP ranges, are refused with "This crawl target is blocked by security policy."

To open the form with a URL already filled in, use https://app.getnameio.com/p/<projectId>/audit?url=https://example.com. The dashboard's Audit your site step links there.

Below the form, Previous Audits lists every audit in the project with its Date, URL, Status, Pages and Lighthouse. Click View to open one.

Audit options

OptionDefaultWhat it does
Max pages50The most pages the audit crawls. Enter any value from 10 to your plan's limit. A value outside that range is corrected when you leave the field.
Include LighthouseOffAfter the crawl, runs Lighthouse on a sample of pages to measure performance, accessibility and SEO.
Render JavaScriptOffLoads each page in a browser before auditing it. Slower.

Lighthouse and JavaScript rendering are on the Pro plan and are charged to your usage credits. On the free plan, both switches are off and marked "On the Pro plan." From an AI assistant on the free plan, an audit that asks for rendering is refused with "Rendering JavaScript in audits is on the paid plan. Run the audit without rendering, or upgrade.", and one that asks for Lighthouse runs without it.

Your first audit

When you create a project with a domain, or add or change a project's domain in its settings, and the project has no audit yet, NameIO starts one for you. The audit covers https://<domain>, up to 50 pages, without Lighthouse. On Pro it also renders JavaScript, which is charged to your usage credits; on the free plan it runs without rendering. If the first audit can't start, for example because a Pro organization doesn't have the $0.20 of credits that rendering 50 pages holds, NameIO shows "Website saved. The first scan could not start."

Plans and limits

FreePro
Pages per audit5010,000 (1,000 with Render JavaScript)
Audit capacity2,000 units100,000 units
Audits running at once5No limit

Pro costs $54 a month or $499 a year, plus applicable tax. Both include $15 of usage credits a month. Crawling itself spends no credits.

Limits count across your whole organization, not per member. Capacity used is the pages plus Lighthouse checks of every audit in the organization. A completed audit counts the pages it actually crawled, not its page limit. A failed audit keeps counting what it had reserved until you delete it: its full page limit if it failed before crawling began, otherwise the pages it had queued up to that limit, plus any Lighthouse checks it had reserved. Deleting audits frees capacity.

A new audit is refused when its page limit (plus any Lighthouse checks) would take your organization past its capacity, with "You've reached audit capacity for your account. Delete old audits from your projects to start a new one." With too many audits running, it is refused with "You've reached the limit of audits running at once. Wait for one to finish or delete it before starting another."

Watch an audit run

While an audit runs, its progress updates every 3 seconds and the list of crawled pages every 1.5 seconds. When the audit finishes, the badge next to the hostname reads Done or Failed. In Previous Audits, a running audit shows Running.

The progress card is titled Crawling pages or Running Lighthouse checks. It shows the current phase (Discovery, Crawling, Lighthouse or Finalizing) and a progress bar: "X / Y pages" during the crawl, or "X / Y checks (N failed)" during Lighthouse.

The Crawled Pages (N) card lists each page as it is crawled, with its HTTP status, path and title, newest first. It shows the last 300 pages.

If the background job running an audit is lost, NameIO marks the audit Failed. This happens the next time its status is checked, or through a regular check of audits that have been running for more than 15 minutes.

How the crawler works

Rate limits and bot protection

Each page fetch gets one of four results, which you can filter on in the Pages tab:

Any 429 pauses the whole crawl. The crawler honors Retry-After. Without it, the crawler waits 30 seconds, then doubles the wait each time, and the gap between requests doubles too, up to 30 seconds. Each URL is retried up to 3 times. The crawl stops when more than 3 consecutive 429s arrive or the total wait passes 30 minutes. The audit then records a "Crawl stopped early: rate limit" issue, and the report says "The crawl stopped early because of the site’s rate limit."

If your site uses bot protection, allowlist the NameIO-Audit user agent in your WAF or bot-protection settings, then re-run the audit. On Cloudflare Pro and above, add a WAF custom rule with the Skip action that skips Super Bot Fight Mode when the user agent contains NameIO-Audit. On Cloudflare's Free plan, a custom rule can't skip Bot Fight Mode: turn Bot Fight Mode off while the audit runs. An audit with Render JavaScript on also tries to render pages that returned a bot challenge.

Shopify stores

Shopify often limits crawlers. NameIO treats a site as a Shopify store when it responds with a powered-by: Shopify header, resolves to an address in 23.227.38.x, or your organization has saved a crawler signature for it. When a Shopify store blocks or throttles an audit, the report shows "Shopify limited this crawl." with the steps below, a signature form and a Re-run audit button.

To let the crawler in, create a crawler-access signature in Shopify and save it in NameIO. You need to be an owner or admin of the NameIO organization.

  1. In Shopify admin, go to Online Store > Preferences > Crawler access and click Create signature.
  2. Enter a name, choose the domain you audit under Domain, pick a period under Valid for (up to 3 months), then click Create.
  3. Copy the Signature-Input and Signature values. You don't need the Signature-Agent value, because NameIO sends it with every request.
  4. In NameIO, click the gear button labelled Project settings next to the project switcher, then open Integrations.
  5. On the Shopify card, click Connect.
  6. Enter the Domain (for example store.example.com), paste Signature-Input and Signature, and click Save signature.
  7. Re-run the audit.

Before saving, NameIO checks the signature against the signing key Shopify publishes. The domain must match the signature exactly. A signature made for the www or non-www version of the domain is refused and names the domain it was made for. An invalid signature is refused with a message to check that it was created for that domain and that both values were copied in full. An expired one is refused with "This signature has already expired. Create a new one in Shopify admin."

Signatures are stored encrypted. Every audit of that exact host in your organization sends one, in any project, and the audited project's own signature is tried first. NameIO sends it only over https to that host, never after a redirect to another host or to plain http. Each project's Integrations page lists the signatures saved on it, with Domain, Type, Added and Expires, and marks one Expired once it lapses. NameIO stops sending an expired signature, so create a new one in Shopify and save it again.

With Render JavaScript on, a Shopify page that answers 429 goes straight to the renderer instead of waiting. If an audit with a signature but without rendering is still throttled, the report says "We ran into an error with your Shopify domain." and asks you to run a new audit with Render JavaScript on.

How JavaScript rendering works

With Render JavaScript on, NameIO still fetches each page directly first. It renders the page in a browser when the direct fetch returned readable HTML with a 2xx status, or a bot challenge other than a 401. Redirects, non-HTML files, errors from your site and rate-limited responses keep the direct result, except on Shopify stores as described above.

NameIO renders the page in a browser, starting with Cloudflare Browser Run (20-second timeout, waiting until network activity has almost stopped). If rendering fails, is challenged or gets an error from your site, the page is recorded as Failed (or stays Blocked or Rate limited).

When Render JavaScript is on, the form shows an estimate for your page limit before you start. Some examples:

PagesEstimate
50$0.04 to $0.20
100$0.07 to $0.39
1,000$0.64 to $3.84

When a rendered audit starts, NameIO holds the high estimate from your credits, monthly credits first and then top-up credits. If you don't have enough, the audit doesn't start, and you see "Rendering up to N pages needs $X of credits available. Lower the page limit or add credits." When the audit ends, completed or failed, you are charged for the render attempts it made, including pages the renderer couldn't read, and the rest of the hold is released. A hold lasts at most 24 hours. A rendered audit you delete while it is running is not charged; its hold is returned when it expires, within 24 hours.

Lighthouse

Lighthouse runs after the crawl, on the start page plus one page for each URL pattern, up to 10 pages. URLs that differ only by a numeric ID, UUID, date or long slug count as one pattern. Each page is checked on mobile and desktop, so an audit runs up to 20 checks. Only crawled pages that returned a 2xx status and loaded normally are eligible. Lighthouse adds several minutes to an audit.

For each Lighthouse check, NameIO holds an estimate from your credits when the check runs and settles it at the check's billed cost.

Read the results

The audit page shows the site's hostname with its status, the date it started and an All audits button to go back. A summary lists pages crawled, issues found (with Critical, Warning and Info counts) and average response time. When Lighthouse ran, it also shows the number of Lighthouse tests, the Lighthouse performance, SEO and accessibility scores, and Lighthouse failures.

Issues (N) groups issues by severity (Critical, Warning, Info), then by type, with the most affected types first. Each type shows its explanation, a How to fix: text, and up to 100 affected URLs with details. Export the issues CSV for the full list.

Pages (N) lists every crawled page with URL, Status, Title, H1, Words, Images and Speed. You can search, and filter by Status (2xx, 3xx, 4xx/5xx, Missing), Crawl result (Read, Failed, Blocked, Rate limited), Alt text (Missing alt, No missing alt), Words and Speed ms.

Performance (N) appears when Lighthouse ran. It lists each check with URL, Device, Status, Perf, A11y, SEO, LCP, CLS, INP and TTFB. Scores of 90 and up are good, 50 to 89 need work, and under 50 are poor. View issues opens the Lighthouse findings for that check.

When an audit is blocked or stops early

The report explains what got in the way:

Pages are saved in batches during the crawl, so a failed audit keeps the pages it saved before it stopped. It shows "This audit stopped early after N pages." and the results cover everything crawled before it stopped. An audit that failed before crawling any page shows "This audit stopped before it crawled any pages." with an error code, such as step_timeout or instance_lost. Include the code if you write to chris@getnameio.com.

What the audit checks

The audit checks for 30 types of issue: 4 critical, 17 warnings and 9 info.

IssueSeverityReported when
Crawler was blockedCriticalThe site returned a bot challenge or access denial instead of the page.
Server error (5xx)CriticalThe page returned a 5xx status.
Broken internal linkCriticalThe page links to a page on your site that was crawled in this audit and returned 4xx or 5xx.
Missing title tagCriticalThe page has no title.
Content may require JavaScriptWarningThe HTML looks like a JavaScript app shell with almost no readable content.
Rate limited (429)WarningThe site answered 429 for this page.
Crawl stopped early: rate limitWarningThe site's rate limit stopped the crawl before it finished.
Page returns an error (4xx)WarningThe page returned a 4xx status.
Redirect chainWarningThe URL goes through two or more consecutive redirects.
Redirect loopWarningThe redirects loop.
Orphan pageWarningThe page is reachable only through the sitemap.
Page has no outgoing linksWarningAn indexable page links nowhere.
Missing meta descriptionWarningThe page has no meta description.
Duplicate titleWarningAnother page has the same title.
Duplicate meta descriptionWarningAnother page has the same meta description.
Missing H1 headingWarningThe page has no H1.
Multiple H1 headingsWarningThe page has more than one H1.
Duplicate page contentWarningAnother page has identical visible text.
Thin contentWarningAn indexable page has fewer than 150 words.
Images missing alt textWarningAn image has no alt attribute. An empty alt="" is accepted.
Conflicting canonical signalsWarningThe HTML rel=canonical differs from the canonical in the HTTP Link header.
Title too longInfoThe title is over 60 characters.
Title too shortInfoThe title is under 10 characters.
Meta description too longInfoThe meta description is over 160 characters.
Meta description too shortInfoThe meta description is under 70 characters.
Heading levels skipInfoHeadings skip a level, for example H2 to H4.
Slow server responseInfoThe page's response took over 1.5 seconds.
Page is noindexInfoA robots meta tag or X-Robots-Tag header sets noindex.
Canonicalized to another URLInfoThe page's canonical points to a different URL.
Page is deep in the site structureInfoThe page is 5 or more clicks from the start URL.

A blocked or rate-limited page gets only that access issue, and a page that couldn't be read gets no issue; neither has its content checked. Find unread pages in Pages under Crawl result: Failed. A JavaScript app shell gets the JavaScript warning in place of content checks. A page counts as a shell when its HTML has an app root element and a script, fewer than 20 words, and no headings, links or images. Duplicate checks skip noindex pages, pages canonicalized elsewhere, and shells. Orphan pages are reported only when the crawl reached every page it found: it wasn't cut off by the page limit or a rate-limit stop, and no JavaScript app shells were left unread. An audit reports at most 2,000 broken internal links.

Export and share results

Each tab has an Export menu covering that tab:

The issues export has the columns Severity, Issue, URL, Details and How To Fix. The pages export has URL, Status, Title, H1, Words, Images, Missing Alt and Response Time (ms). The performance export has URL, Device, Performance, Accessibility, SEO, LCP (ms), CLS, INP (ms) and TTFB (ms).

To share results, send an export, or have an AI assistant write a report with the seo-audit skill. The skill runs an audit, reads its results, saves a report and can turn on sharing for that report. Deleting a report doesn't delete the audit.

Delete audits and how long results are kept

Audit results don't expire. They are kept until you delete the audit or your account is erased.

To delete an audit, open the row menu in Previous Audits and choose Delete audit. You need to be an owner or admin. Deleting stops the audit if it is still running and removes its pages, issues and Lighthouse results. The capacity it used is freed.

Run audits from an AI assistant

NameIO's MCP server at https://app.getnameio.com/mcp lets an AI assistant run and read audits. See Connect an AI assistant for setup.

ToolWhat it doesAccess
run_site_auditStarts an audit and returns its auditId.Make changes
get_audit_statusReports status, phase, page and Lighthouse progress, and any error code. Defaults to the newest audit.Read
get_audit_issuesLists issues sorted by severity, filtered by severity or issue type, with each type's fix and up to 5 sample URLs. Returns 200 rows by default, up to 1,000.Read
get_audit_pagesLists crawled pages, filtered by crawl result (ok, blocked, rate_limited, error), status code or URL text. Returns 100 rows by default, up to 1,000.Read
list_site_auditsLists the project's audits, newest first.Read
delete_site_auditPermanently deletes one audit by its exact auditId. Needs an owner or admin. Saved reports and project context are kept.Make changes

The read tools spend no credits.

run_site_audit takes projectId, url, maxPages (10 to 10,000, default 50), renderJavaScript (default false) and runLighthouse (default false). Lighthouse is off unless the assistant asks for it. The assistant then polls get_audit_status and reads the results with get_audit_issues. Plan limits apply as in the app. Over capacity, at the limit of running audits, or asking for rendering on the free plan, the tool explains why in its answer and starts no audit. Asking for more pages than the free plan allows returns AUDIT_PAGE_LIMIT_EXCEEDED.

An assistant connected read-only can't see the tools that make changes. To allow them, disconnect the assistant under Settings → Connected apps in NameIO (row menu, Disconnect), connect it again and leave Make changes on.

What's not done