8Examples / blog

SEO · Web crawling · SQLite

Building DIY SEO Hub: An SEO Crawl You Can Keep

A useful audit should take you from “something needs attention” to the page, link, or file you can actually fix. I built DIY SEO Hub around that path, with a complete crawl database you can take with you.

By Sean Bennett · · 8 min read

A broken link is useful information when the report tells me which page contains it, where it points, and what response came back. A title warning becomes actionable when I can see the actual title and its length. That is the level of detail I wanted from DIY SEO Hub.

The centre of the site is the Site Spider. Give it a website address, let it collect the pages and their resources, and use that stored crawl to investigate the site. The same data powers the health summary, individual checks, page inspector, and downloadable SQLite file.

The five screenshots below were captured from the live site on September 11, 2026. They show real 8Examples crawls from September 6 and September 10. Their dates and scores describe those snapshots; they are not a fresh scan of today’s website.

Start with the website, without an account

The homepage has a domain field and a scan button. An account is optional for starting a scan. The result is an unlisted workspace link you can return to while the crawler runs. If you supply an email address, the form offers a completion report; it does not sign you up for a newsletter.

An account becomes useful when you want to keep scans together or schedule another run. This makes the first interaction small: enter the site you own or are authorised to check, then look at what the crawler finds.

DIY SEO Hub homepage with 8examples.com in the domain field and the Scan my site button
The live homepage, ready to scan 8Examples. Filling the field for this screenshot did not start another crawl. Select the image to open it at full size.

The published limits at the time of writing are 5,000 pages and 1,000 assets per scan. Files over 10 MB are skipped and counted. The crawler follows internal links and sitemap entries, reads robots.txt, and identifies itself as DIYSEOHubBot. Those boundaries matter when you interpret a report: “not fetched” can mean a limit or a crawl rule, rather than a missing page.

Crawl once, ask several questions

The web application and the background processor have different jobs. The application accepts the request and serves the results. The processor works through the crawl queue, fetches URLs, extracts information, and records what happened. The browser can show progress without holding the original request open for the whole crawl.

Once that information is stored, running the title check does not visit every page again. Neither does checking headings or internal links. Those checks query the same snapshot. That makes it possible to move between questions without changing the evidence underneath each one.

  1. 1. Request a scan

    A website address becomes a queued job.

  2. 2. Fetch and record

    The processor stores responses and discovered URLs.

  3. 3. Inspect the snapshot

    Checks and the inspector query the saved crawl.

  4. 4. Keep or compare it

    Download SQLite or run a new scan after a change.

The website collects the request; the background worker collects the evidence.

The score is the beginning of the investigation

The health panel groups findings into things a site owner can act on: titles and descriptions, headings, broken links, redirects, response codes, indexability, image alt text, large files, internal links, and sitemap coverage. Each card opens the corresponding results.

September 6 crawl health panel for 8examples.com, showing a score of 95, four title issues, nine description issues, and other check results
The September 6 crawl, displayed by the current health checks. The useful part is the breakdown beneath the score: it tells me where to look next. Select the image to open it at full size.

A summary can also explain why something was excluded. A page deliberately marked noindex should not create the same editorial to-do list as a public landing page. An image with an explicitly empty alt attribute may be decorative; that is different from an image with no alt attribute at all.

The score comes from the application’s rules and weighted findings. It is a way to organise this crawl’s results. It does not measure Google rankings, traffic, or whether a particular page is in Google’s index. The site’s “SEO rank” directory likewise orders scanned sites by this health score.

Go from a warning to the actual page

Opening the title check gives me the URL, title, length, and reason for the warning. In this snapshot, four titles exceeded the tool’s 60-character threshold. The report puts those rows first and provides an inspect link beside each page.

Title-tag results listing four long titles on 8examples.com, their URLs, lengths, and links to inspect each page
Real title findings from the September 6 snapshot. More rows continue below the screenshot. These are the saved titles, not a claim that the current pages still have those values. Select the image to open it at full size.

A threshold gives me a review queue. I still decide whether a shorter title communicates the page well. The same principle applies to a short page or a large download: understand its purpose before changing it just to make a badge turn green.

The inspector brings a single URL’s evidence together. It shows the fetch result, content type, size, crawl depth, sitemap membership, and a link to the stored response. Further down are the extracted page fields, response headers, inbound and outbound links, and resources.

Page inspector for the saved 8Examples homepage, showing HTTP 200, a 37 KB response, sitemap membership, and a link to stored HTML
The inspector’s fetch details for the 8Examples homepage. “View stored HTML” opens what the crawler saved, which is useful when the live site has since changed. Select the image to open it at full size.

That distinction between the saved page and the current page is essential. After a fix, rerunning a check on the old database still examines the old crawl. A new crawl is how I check the deployed change.

The download is the crawl itself

The download button produces a single SQLite database containing the scan’s events, stored response bodies, and extracted data. It includes tables for URLs, pages, links, resources, images, and sitemap entries. You can open it with a SQLite browser or query it yourself.

For example, this query lists internal links whose fetched target returned an error:

SELECT links.from_url,
       links.to_url,
       urls.status_code
FROM links
JOIN urls ON urls.url = links.to_url
WHERE links.internal = 1
  AND urls.status_code >= 400
ORDER BY urls.status_code, links.from_url;

This is a starting query, not an exact copy of the product’s broken-link check. It includes throttled responses such as 429 and does not include requests that failed without an HTTP status. The stored data lets you make those distinctions explicitly.

Underneath the interface, each scan has its own database. Events and stored bodies are the source from which the query tables can be rebuilt. The download uses SQLite’s VACUUM INTO to create a consistent standalone copy. That gives a scan a useful life outside the running application.

Fix, test, deploy, then rescan

I have used these reports on 8Examples itself. One earlier finding was particularly concrete: two pages linked to /cdn-cgi/l/email-protection, which returned 404. That kind of report gives me a bounded problem to investigate instead of a vague instruction to “improve SEO.”

My working loop is to inspect the finding, decide whether it is appropriate to fix, make one reviewable change, test it, deploy it, and run another crawl. Separate commits help keep the reason for each change visible.

Public September 10 report for 8examples.com showing 48 pages, 777 assets, a score of 96, and the SQLite download
A later public report: the September 10 crawl, with titles and descriptions passing and heavy assets still flagged. It is a record of that crawl, not a promise that the site is finished or that rankings increased. Select the image to open it at full size.

The 8Examples scan history keeps dated reports at their own addresses. The two illustrated reports are the September 6 snapshot and the September 10 snapshot. Comparing individual findings is more informative than treating the small difference between their overall scores as proof of an outcome.

For scans associated with the same browser or account, the workspace can compare changes in pages, links, status codes, redirects, titles, descriptions, and indexability. Accounts can schedule scans at one-, seven-, or thirty-day intervals. Change alerts are designed to send when the comparison finds changes, rather than emailing an identical report every time.

Keep the automation tied to the evidence

The background processor can also write an AI fix plan from check summaries and sampled findings. That helps translate a table into a short set of priorities. The plan is advice to verify. A suggestion to add a CDN, for example, is not evidence that the site lacks one; I still check the actual setup.

The crawler also needs to interpret responses carefully. A rate limit is a request to slow down. The implementation backs off and retries, then lists persistent throttling separately from ordinary errors. Treating those responses as a distinct condition makes the report easier to act on.

This version fetches and parses HTTP responses; it does not render every page in a full browser. Content that appears only after client-side JavaScript runs may not be present in the saved HTML. Together with crawl limits and robots rules, that defines what this particular report can tell me. Search Console and a real browser remain useful for questions outside that view.

Try it on a site you can improve

The part I most wanted to build is the path from a finding to inspectable evidence. I can start at the health panel, open a specific check, inspect the affected page, and keep the database. After making a change, I can come back with a new crawl and see what changed.

If you have a site that has accumulated old links, uneven metadata, or pages that are hard to reach, run it through the Site Spider. Pick one finding you understand, make a careful fix, and use the next scan to check your work.

See what your site is serving.

Start a free scan, explore a real report, and download the evidence.

Try DIY SEO Hub →

Comments 0

No comments yet. Start the conversation.

Leave a comment

Site author? Sign in to reply officially.

Commenting is temporarily unavailable while CAPTCHA is being configured.