Skip to main content
RTILA Marketplace

On-Page SEO Auditor - required inputs

Audit any URL list for indexability, metadata, readability, links, structured data and accessibility - on your own machine.

SEO Intermediate Stable v1.0.0 Updated Updated 2026-09-20 10 min read
Download
  • Windows x86_64

    BOT_on-page-seo-auditor.exe

    98.9 MB

    Download
  • macOS Apple Silicon chmod +x

    BOT_on-page-seo-auditor.sh

    87.5 MB

    Download
  • macOS Intel chmod +x

    BOT_on-page-seo-auditor.sh

    99.4 MB

    Download
  • Linux x86_64 chmod +x

    BOT_on-page-seo-auditor.sh

    122.5 MB

    Download

Do not rename the downloaded file - the filename carries the bot's configuration id.

This tab lists everything you must supply before a run: values fixed once in the project settings, values the launcher asks for on each run, required secrets, and any proxy, CAPTCHA or start-URL needs. Back to the overview tab.

The tables on this page are generated automatically from the published project configuration and therefore cannot disagree with it.

Before you run

  1. Download the launcher for your operating system from the overview tab.
  2. On first launch the bot asks for the values in the "Requested at run time" table below; values in the "Configured in project settings" table are filled in once in the bot's settings beforehand.
  3. When the run finishes you will find the output file next to the launcher, in the folder you ran it from.

Configured in project settings

Values you fill in once in the bot's settings before running.

Fields supplied in project settings
FieldTypeDescriptionDefault / example
urls_to_audit (required) List (one per line) Declared in project settings. https://rtila.com/ https://example.com/
title_pixel_limit Text Declared in project settings. 580
desc_pixel_limit Text Declared in project settings. 990
low_content_words Text Declared in project settings. 300
max_outbound_links Text Declared in project settings. 100
start_urls (required) URL Start URLs the bot navigates to.

Requested at run time

Values the launcher asks for each time the bot starts.

Runtime-acquired input fields
FieldTypeDescriptionDefault / example
No fields.

Secrets you must provide

This bot requires no secrets.

Secret fields are requested at run time and are never embedded in the published configuration.

Start URLs

Start URLs the bot navigates to.

View the full project configuration on the Config tab.

Frequently asked questions

How do I audit a list of URLs for on-page SEO?
Paste your URLs, one per line, into the required urls_to_audit project setting before launching. The bot works through the list with up to four concurrent workers, and every dataset records a Page_URL column so rows stay attributable to the page they came from. Results are de-duplicated per URL.
What checks does the auditor run on each page?
Nine datasets per page: HTTP response and indexability (status, redirects, robots directives, canonicals, charset, viewport, cookies, security headers with a letter grade); on-page elements (title and meta description with pixel-width truncation checks, heading structure outline, hreflang, Open Graph and Twitter card scoring); content readability (word counts, six readability formulas, text-to-HTML ratio, keyword-density flag, placeholder-text detection); a full links census (internal versus external counts, rel values, anchor-text quality, insecure targets); media and performance (image alt coverage, missing dimensions as a layout-shift risk, modern-format coverage, render-blocking scripts and stylesheets, DOM size and depth, TTFB); structured data (JSON-LD validity, schema types, rich-result eligibility, Microdata and RDFa census); an AXE accessibility audit with severity counts and a grade; and two triage views, Critical_Issues and Healthy_Pages.
Does it check canonical tags and robots directives?
Yes, in depth. The Response_Indexability dataset records the meta robots content, the X-Robots-Tag response header, every robots directive parsed out (noindex, nofollow, noarchive, nosnippet, max-snippet and friends), the source of any noindex signal, canonical count, whether the canonical is self-referencing and absolute, where it resolves to, and a canonical verdict listing concrete issues such as missing, multiple, relative, cross-host or pointing elsewhere. A combined indexability verdict names every blocker found, including meta refresh and non-HTML content types.
How does it score readability?
The Content_Readability dataset computes Flesch Reading Ease, Flesch-Kincaid grade, Gunning Fog, SMOG, Automated Readability and Coleman-Liau from the rendered body text, plus average sentence length, syllables per word, unique-word ratio and estimated reading time. It flags pages as thin when the word count falls below the low_content_words setting (300 by default), classifies length from Empty to Long-form, reports the top non-stopword terms with a keyword-stuffing density verdict, and detects leftover lorem ipsum or placeholder text.
Does it run an accessibility audit?
Yes. The audit_accessibility step runs the AXE engine over the whole document and stores violations, passes and incomplete checks; the Accessibility_AXE dataset then reports counts by severity (critical, serious, moderate, minor), affected nodes, the specific violation ids, WCAG and best-practice tags, a pass-rate score and a letter grade. The step is wrapped in error handling: if the engine cannot run because of a content security policy, a blocking rule or an unreachable engine source, the output says so explicitly instead of pretending the page passed.
What lands in the critical issues file?
Critical_Issues is a filtered triage view containing only pages that fail at least one hard check: HTTP status 400 or above, a title count other than one, an H1 count other than one, more than one meta description, more than one canonical, a missing viewport tag, noindex present in meta robots or the X-Robots-Tag header, more than 25 percent of images missing alt text, or a DOM larger than 1500 nodes. An empty Critical_Issues file after a run is the good-news outcome.
How many URLs can one run audit?
There is no built-in cap on the list length; the practical bounds are your patience and the target server's tolerance. The bot audits with up to four concurrent workers, and each page navigation allows 60 seconds before it is caught, logged and skipped. For large lists, audit in batches and keep an eye on rate-limit responses in the Status_Code column.
Why does the bot block images and stylesheets?
Speed and bandwidth. The configuration blocks image, media, font, stylesheet, websocket, manifest, texttrack, eventsource and other network requests, because the audit reads the DOM, response headers and HTTP metadata rather than pixels. Image tags and their attributes are still fully analysed for alt text, dimensions, lazy loading and formats - only the binary downloads are skipped. The trade-off is that the bot cannot judge visual rendering, so screenshot-dependent checks are out of scope.
Does it crawl my whole site automatically?
No. The bot audits exactly the URLs you submit in the urls_to_audit setting and nothing more; it does not discover pages, follow internal links or parse sitemaps. That is deliberate: an audit list you control is predictable, polite to the server and defensible. If you need discovery, generate the URL list from your own sitemap or analytics export first, then feed it in.
Can it detect structured data and rich result eligibility?
Yes. The Structured_Data dataset counts and parses every JSON-LD block, records parse errors verbatim, walks nested nodes and graphs, and lists all schema types found with counts. It sets flags for Organization, LocalBusiness, WebSite, WebPage, BreadcrumbList, Article, Product, FAQ, HowTo, Review, AggregateRating, VideoObject, Event, Person and Speakable, and produces a rich_result_eligible summary naming the enhancements the page qualifies for. A separate Microdata_RDFa census reports itemtype, itemprop, typeof and property usage so mixed-format markup is visible.
How are duplicate pages detected?
The Content_Readability dataset fingerprints each page's normalised body text with a full content hash and a 64-bit simhash built from three-word shingles, and exposes an eight-character near_duplicate_key. After a run, sort or group that column across your URL list: pages sharing a near-duplicate key have substantially similar body text, which is how you find template duplicates, boilerplate-heavy pages or canonicalisation candidates without eyeballing every file.
Does the bot need an internet connection to run?
Yes on first run: the launcher fetches its configuration by id from the backend at launch, so an internet connection is required at least the first time it starts.
Can I rename the downloaded file?
No. The downloaded file must keep its exact name - the filename carries the per-bot configuration id, and renaming it breaks the configuration fetch at launch.