Partnership open — we are taking on agency and developer partners. White-label our audit engine, AI stack and delivery.

Partnership details
Home Solutions Services Intelligence Docs About Blog Book a free demo
Documentation

Kovik SEO Audit Engine

One Python file that crawls a website, runs 26 checks, scores five categories and writes a watermarked PDF report. Command line, no dashboard, no API keys.

What it does

The engine fetches pages from your site the way a search engine does — one request at a time, same host only, respecting robots.txt — parses the HTML, and measures what is actually on the page. Nothing is assumed and nothing is estimated from a third-party index. Every line in the report comes from a measurement taken during that crawl.

It then scores five categories, ranks the failures by severity, and writes a PDF you can send to a client as it is.

Who it is for

Anyone who has to explain, in writing, why a website is not ranking — and what to fix first. It is built for one-site-at-a-time agency work, not for crawling ten thousand pages.

Install

Python 3.9 or newer. Four libraries, no API keys.

terminal
pip install requests beautifulsoup4 lxml reportlab matplotlib

Download kovik_audit.py and requirements.txt from the repository, then install:

terminal
pip install -r requirements.txt

Run an audit

The shortest version — crawl up to ten pages and write a PDF next to the script:

terminal
python kovik_audit.py https://client-site.in --out client-audit.pdf

The terminal prints the crawl, the score for each category and the first six findings while the PDF is being written:

output
KOVIK · SEO AUDIT ENGINE

  [1/10] https://client-site.in/
  [2/10] https://client-site.in/services
  ...

  Overall score  84/100  (Good, with gaps)
  Technical        74
  On-page          81
  Content         100
  Structured data 100
  Performance      68

  3 failing · 3 to improve
    FIX  [critical] HTTPS on every page
    FIX  [high    ] XML sitemap present

  PDF  → client-audit.pdf
  Done in 1.6s

All options

FlagWhat it does
--pages 12How many pages to crawl. Eight to twelve suits a small business site.
--depth 2How many link hops from the home page the crawl may go.
--out report.pdfWhere to write the PDF. Defaults to audit-<host>-<date>.pdf.
--json data.jsonAlso dump every measurement as JSON, for a dashboard or a database.
--csv issues.csvAlso dump the issue list as CSV, for a spreadsheet.
--client "Sharma Dental"Client name printed on the cover.
--label https://client-site.inPublic URL to show when you audit a staging copy or a local mirror.
--delay 0.5Seconds between requests. Keep it at 0.4 or higher on shared hosting.
--brand "Your Agency"Replaces the brand name on the cover and in the footer.
--quietSuppresses the crawl progress in the terminal.

What it checks

Twenty-six checks across five weighted categories.

CategoryWeightChecks
Technical30%HTTPS, robots.txt, XML sitemap, 404 handling, broken pages, redirect chains, canonical tags, accidental noindex, mobile viewport, page language
On-page25%Title tags and their length, duplicate titles, meta descriptions, duplicate descriptions, a single H1, H2 structure, image alt coverage
Content20%Word count per page, thin pages, internal links per page
Structured data15%JSON-LD present and valid, schema types found, Open Graph tags, LocalBusiness or Organization identity
Performance10%Server response time, HTML weight, gzip or brotli compression, cache headers

A pass scores 1, an improvement scores 0.5 and a failure scores 0. Each check carries its own weight inside the category, so a missing title hurts more than a missing lang attribute. Categories are then weighted into the overall score out of 100.

Reading the report

The PDF is six pages, in this order:

  1. Cover — site, date, score ring, what is inside.
  2. Executive summary — score card, category chart, the five things to fix first.
  3. Findings — grouped critical to low. Each one states what was measured, which pages were affected, and what to do about it.
  4. Page-by-page table — status, page score, title and description length, H1 count, words, missing alt text, response time, page weight.
  5. Method and limits — what the audit does not cover.

Every page carries a diagonal watermark and a footer line, so a report that leaves your inbox still says where it came from.

JSON and CSV output

Useful when you want to store the result, chart it over months, or feed it into a client portal.

terminal
python kovik_audit.py https://client-site.in --pages 10 --out audit.pdf --json audit.json --csv audit.csv

The JSON carries the crawl summary, the scores, every check with its status and fix text, and a row per page. The CSV carries the issue list only — severity, category, check, status, what was found, what to do, which pages.

Your own branding

terminal
python kovik_audit.py https://client-site.in --pages 12 --client "Sharma Dental Clinic, Hajipur" --out sharma-dental.pdf

Colours, the watermark text and the footer line live at the top of the report module — four constants. If you white-label the engine for another agency, that is the only file you need to touch.

Limits

  • One crawl, from one location, at one moment. Response times are a signal, not a benchmark — run it twice before quoting a number.
  • No backlink data, no search volume, no rank tracking, no Core Web Vitals field data. Those need Search Console, Analytics and a rank tracker.
  • JavaScript-rendered content is not executed. A site that builds its content in the browser will look almost empty to the crawler — which is worth reporting on its own.
  • It crawls one host. Subdomains and external pages are counted as outbound links, not crawled.

Troubleshooting

“Could not fetch the site”

Check the URL includes https://, that the site is reachable from your network, and that a proxy is not intercepting the request. On a corporate network, set HTTPS_PROXY before running.

Every page comes back with zero words

The site is rendering its content with JavaScript. Try a server-rendered page, or treat the empty result as the finding it is.

PDF looks wrong, fonts missing

The report uses Helvetica, which ships with reportlab. If you have edited the styles and introduced a custom font, register it with pdfmetrics.registerFont first.

Questions

Do I need any API key or paid SEO tool to run this?

No. The engine talks to the website directly. It needs Python and four libraries (requests, beautifulsoup4, lxml, reportlab). There is no account, no subscription and no third-party SEO service involved.

How many pages should I crawl?

Eight to twelve pages is right for a small business site. That covers the home page, every service page and the main about and contact pages. Crawling more than that on a small site mostly repeats the same findings.

Can I put my own branding on the report?

Yes. Pass --brand "Your Agency" and --client "Client Name". The footer line, the cover and the metadata all follow those values. The Kovik watermark is the default; it is one string in the code if you want to change it.

Will it work on a site built with React or Next.js?

Only if the HTML is server-rendered. If the page is empty until JavaScript runs, the crawler sees an empty page — and that is itself a finding worth reporting, because so do some search engine crawlers.

Is it safe to run on a client's live site?

Yes, if you keep --delay at 0.4 seconds or higher. The engine sends one request at a time, identifies itself as KovikAuditBot and respects robots.txt.

Want the audit run for you, with the fixes done?

We run this engine on your site, hand you the report, and if you want, do the work. The report is free either way.

Book a free demo → WhatsApp us No cost · No obligation · Reply within one working day
WhatsApp