Infestus SEO — Professional Website Audit Tool
Version: 2.0
Author: Infestus SEO | infestusseo.com
Contact: glasco@infestusseo.com
Overview
A comprehensive, professional-grade Python SEO audit tool designed for Infestus SEO client work. Performs 100+ automated checks across every factor that matters for Google, Bing, and Yahoo SEO, Google PPC quality scores, and Facebook Ads performance. Generates branded PDF reports and Google Docs, tracks historical data, and sends Gmail alerts for critical issues.
What Gets Audited (100+ Checks)
Technical SEO (25% weight)
Check | Description |
|---|---|
HTTPS / SSL | Certificate validity, expiry, mixed content |
HTTP→HTTPS Redirect | 301 vs 302, redirect chains |
WWW Canonicalization | www vs non-www consistency |
robots.txt | Exists, sitemap reference, crawler blocking |
XML Sitemap | Exists, URL count, lastmod tags, index |
Canonical Tags | Present, HTTPS, self-referencing |
Meta Robots | noindex, nofollow, X-Robots-Tag |
Hreflang | Multi-language tag validation |
DNS Records | A, MX, SPF, DMARC |
Security Headers | HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy |
TTFB | Time to First Byte (<0.8s target) |
Compression | Gzip/Brotli response compression |
Cache-Control | Browser caching headers |
Custom 404 | Proper 404 status, soft 404 detection |
URL Structure | Length, hyphens vs underscores, case, special chars |
Character Encoding | UTF-8 declaration |
On-Page SEO (20% weight)
Check | Description |
|---|---|
Title Tag | Exists, length (50-60 chars), keyword presence, position, stuffing |
Meta Description | Exists, length (150-160 chars), keyword, CTA |
H1 Tag | Exists, count (only one), keyword presence |
H2-H6 Tags | Present, hierarchy, keyword usage |
Content Length | Word count (thin content detection) |
Keyword Density | Per-page keyword optimization |
E-E-A-T Signals | Contact info, About page, Privacy Policy, Terms, reviews, social proof |
Images | Alt text, dimensions, lazy loading, WebP format |
Internal Links | Count, anchor text quality, orphaned pages |
External Links | Broken external links |
Performance & Core Web Vitals (15% weight)
Check | Description |
|---|---|
LCP | Largest Contentful Paint (≤2.5s good) |
TBT/FID | Total Blocking Time proxy (≤200ms good) |
CLS | Cumulative Layout Shift (≤0.1 good) |
FCP | First Contentful Paint (≤1.8s good) |
Speed Index | Visual loading speed (≤3.4s good) |
TTI | Time to Interactive (≤3.8s good) |
PageSpeed Score | Mobile + Desktop (0-100) |
DOM Size | Element count (<1500 recommended) |
Page Weight | Transfer size (<500 KB recommended) |
Render-Blocking | CSS/JS blocking resources |
Mobile (10% weight)
Check | Description |
|---|---|
Viewport Meta Tag | Present and correctly configured |
Responsive CSS | Media queries detected |
Horizontal Scroll | No content overflow on mobile |
Tap Target Sizes | ≥44×44px for touch elements |
Font Size | Readable on mobile (≥12px) |
Flash/Plugin Content | Non-mobile-friendly elements |
Structured Data (5% weight)
Check | Description |
|---|---|
JSON-LD | Present, schema types identified |
Microdata | Detected if JSON-LD absent |
Schema Types | Organization, WebSite, LocalBusiness, BreadcrumbList |
Local Business Schema | NAP in structured data |
Security (5% weight)
Check | Description |
|---|---|
HSTS | Strict-Transport-Security header |
CSP | Content-Security-Policy header |
X-Frame-Options | Clickjacking protection |
X-Content-Type-Options | MIME sniffing protection |
X-XSS-Protection | XSS filter header |
Referrer-Policy | Referrer information control |
Permissions-Policy | Browser feature permissions |
Server Version | Version disclosure in headers |
Cookie Consent | GDPR/CCPA banner detection |
Social & PPC (8% weight)
Check | Description |
|---|---|
Open Graph Tags | og:title, og:description, og:image, og:url, og:type |
OG Image | Present, dimensions (1200×630 recommended) |
Twitter Card | twitter:card, twitter:title, twitter:description, twitter:image |
Facebook Pixel | Meta Pixel detection and event tracking |
Facebook Domain Verification | Domain verification meta tag |
PPC Landing Page Speed | Load time for ad landing pages |
PPC Value Proposition | Clear H1/headline |
PPC Call-to-Action | CTA buttons and forms |
PPC Trust Signals | Reviews, certifications, guarantees |
PPC Lead Capture | Form presence and length |
PPC Transparency | About/Privacy pages for Google Ads |
PPC Message Match | Ad-to-page relevance guidance |
Local SEO (5% weight)
Check | Description |
|---|---|
Phone Number (NAP) | Visible phone number |
Address (NAP) | Physical address on page |
Google Maps Embed | Maps integration |
Google Business Profile | Link to GMB listing |
LocalBusiness Schema | Structured data for local |
Links (7% weight)
Check | Description |
|---|---|
Broken Internal Links | 4xx/5xx internal pages |
Redirect Chains | 3+ hop redirect chains |
Broken External Links | Outbound broken links |
Slow Internal Pages | Pages loading >3s |
Site Crawl Summary | Total pages, issues overview |
Headless Browser Checks (via Playwright)
Check | Description |
|---|---|
JS Rendering | Page renders correctly with JavaScript |
JS Console Errors | JavaScript error detection |
Broken Resources | Failed resource loads |
Mixed Content | HTTP resources on HTTPS page |
DOM Content Loaded | Browser-measured DCL time |
Mobile Rendering | Mobile viewport, horizontal scroll, tap targets |
Installation (Fedora 43)
Bash
# Clone or copy the audit tool directory
cd /path/to/infestus_seo_audit
# Run the automated installer
bash install_fedora.sh
Or manually:
Bash
# System dependencies
sudo dnf install python3 python3-pip chromium libnotify rclone
# Python packages
pip3 install --user -r requirements.txt
# Playwright browser
python3 -m playwright install chromium
Usage
Set Up a New Client
Bash
python3 audit.py --setup example.com
This creates clients/example_com/config.json and a sample keywords.csv.
Run an Audit
Bash
# Basic audit
python3 audit.py --client example.com
# With competitor benchmarking
python3 audit.py --client example.com --competitors comp1.com comp2.com comp3.com
# With custom keywords file
python3 audit.py --client example.com --keywords /path/to/keywords.csv
# Limit crawl depth (faster)
python3 audit.py --client example.com --max-pages 20
# Quiet mode (no terminal output)
python3 audit.py --client example.com --quiet
View Audit History
Bash
python3 audit.py --history example.com
List All Clients
Bash
python3 audit.py --list-clients
Schedule Weekly Audits
Bash
# Install cron job (runs every Monday at 8 AM)
python3 scheduler.py --install-cron
# Run all clients immediately
python3 scheduler.py --run-now
# Check cron status
python3 scheduler.py --status
# Remove cron job
python3 scheduler.py --remove-cron
Keywords File Format
Create a CSV file with the following columns:
csv
keyword,target_page
seo services dallas,https://example.com/seo-services
local seo company,https://example.com/local-seo
best seo agency,https://example.com
Client Configuration File
Located at clients/{domain}/config.json:
JSON
{
"domain": "example.com",
"client_name": "Example Client",
"client_email": "client@example.com",
"competitors": ["competitor1.com", "competitor2.com"],
"keywords_file": "clients/example_com/keywords.csv",
"max_pages_to_crawl": 50,
"alert_on_critical": true,
"alert_threshold_score": 70,
"schedule": "weekly",
"notes": "WordPress site, local business"
}
Output Files
File | Location | Description |
|---|---|---|
PDF Report |
| Full branded PDF report |
Google Doc | Google Drive: | Branded Google Docs report |
History JSON |
| Full audit history |
History CSV |
| Trend tracking spreadsheet |
Scheduler Log |
| Weekly run logs |
Scoring System
Category | Weight |
|---|---|
Technical SEO | 25% |
On-Page SEO | 20% |
Performance | 15% |
Mobile | 10% |
Social & PPC | 8% |
Links | 7% |
Structured Data | 5% |
Security | 5% |
Local SEO | 5% |
Letter Grades
Score | Grade |
|---|---|
97-100 | A+ |
93-96 | A |
90-92 | A- |
87-89 | B+ |
83-86 | B |
80-82 | B- |
77-79 | C+ |
73-76 | C |
70-72 | C- |
67-69 | D+ |
63-66 | D |
60-62 | D- |
<60 | F |
Alerts
Critical issues automatically trigger:
- Gmail alert to
glasco@infestusseo.comwith branded HTML email - Desktop notification via
notify-send(Fedora/Linux )
Google Drive Integration
Reports are automatically uploaded to:
Plain Text
Google Drive / Infestus SEO / {domain} / seo_audit_{domain}_{timestamp}.pdf
Google Docs are created at:
Plain Text
Google Drive / Infestus SEO / {domain} / SEO Audit - {domain} - {timestamp}
Requires rclone configured with Google Drive (manus_google_drive remote).
Competitor Benchmarking
When competitor domains are provided, the report includes a comparison table showing:
- Page load time
- Word count
- Schema markup presence
- Open Graph tags
- Facebook Pixel
- Core metrics side-by-side
Notes for Cloudflare-Protected Sites
Some sites use Cloudflare's bot protection ("One moment, please..." challenge). The audit tool will:
- Report the Cloudflare challenge page as detected
- Still perform all technical checks (DNS, SSL, headers, sitemap, robots.txt)
- Use headless Chrome to attempt JavaScript rendering
- Note that on-page content checks may be limited for heavily protected sites
For client sites, consider running from a whitelisted IP or using the client's staging environment.
Support
Infestus SEO
Website: infestusseo.com
Email: glasco@infestusseo.com
