Home/ Features/ Site crawling

Site crawling and indexing

A polite async crawler that maps every URL on a site, honours robots.txt, follows redirects and extracts the on-page signals later analysis depends on.

What it is

A crawler is the foundation of every SEO tool. Before you can audit a page, score its speed, cluster its keywords or predict its traffic, something has to fetch it, parse it and record what it found. The crawler is that something, and in this platform it is the first pillar everything else stands on.

It is an async crawler built on httpx and BeautifulSoup. That choice matters: it means the crawler has almost no dependencies, starts in milliseconds, and can be deployed on a small VPS. It will optionally use Playwright to render JavaScript when you need it, and degrade back to plain HTTP when you do not.

How it works

You point it at a domain and it does the patient work:

What it does for your site

A crawl answers questions that are otherwise guesswork. How many pages does your site actually have, as opposed to how many you think it has? Which pages are orphaned, reachable by no internal link at all? Which titles are duplicated across dozens of URLs, splitting their own ranking signal? Which images are missing alt text? Which redirect chains are quietly leaking link equity?

Every one of those is a real, fixable problem with a measurable cost. The crawler finds them all in one pass, and stores the result so the audit, the graph and the forecasts can reuse it rather than re-crawling.

Polite by design. Rate limiting, robots.txt compliance and a configurable user agent are not optional extras. A crawler that gets your server blocked or your brand complained about is worse than no crawler at all.

Where the results go

The crawl output is not an end in itself. It feeds the on-page audit, which turns pages into a prioritised fix list, and the Core Web Vitals checks. It also builds the link graph that authority metrics are computed from.

Crawls run as queued jobs, so a 5,000-page crawl does not hold a browser connection open for minutes. You get a job id back immediately and poll for progress — which is why the dashboard can show live progress on a long crawl without timing out.

Configuration

SettingWhat it controls
CRAWLER_MAX_PAGESUpper bound on pages per crawl. Default 500.
CRAWLER_MAX_CONCURRENCYSimultaneous requests. Default 8.
CRAWLER_REQUEST_TIMEOUTPer-request timeout in seconds. Default 20.
CRAWLER_RESPECT_ROBOTSHonour robots.txt. Leave this on.
CRAWLER_USER_AGENTIdentify yourself honestly in server logs.

Related capabilities

See it on your own site

Point the crawler at your domain and you will have a full audit, a health score and a prioritised fix list in minutes.

Open the dashboard All features