Compatible XF 2.x versions
A comprehensive SEO audit dashboard built into AdminCP. Scan your forum for 80+ SEO issue types across schema markup, meta tags, content quality, internal/external links, images, and HTML structure. Optionally auto-fix common gaps at render time, no core file edits required.
Admin CP > Tools > Checks and tests > SEO Audit
Checkers
Run scans from the command line:
Code:
php cmd.php qubn-seoaudit:scan [options]
Flags: --delta, --forum=N, --date-from, --date-to, --external-links, --no-content, --no-schema, --no-config, --core-schema-gaps, --theme-heuristics, --no-url-cache, --soft-404, --email, --email-to
Auto-fix runs at render time via template modifications and an event listener. It does not modify your database content or core files. All auto-fix features are off by default and must be explicitly enabled. Each issue with a specific AdminCP fix includes a Fix it link that takes you straight to the right page.
- 2.3
A comprehensive SEO audit dashboard built into AdminCP. Scan your forum for 80+ SEO issue types across schema markup, meta tags, content quality, internal/external links, images, and HTML structure. Optionally auto-fix common gaps at render time, no core file edits required.
Admin CP > Tools > Checks and tests > SEO Audit
Checkers
- Configuration (on by default) - board URL, friendly URLs, HTTPS, sitemap inspection, noindex, metadata logo, analytics
- Schema / JSON-LD (on by default) - thread author, body, title length, duplicates, slug collisions, forum descriptions
- Meta Tags (on by default) - empty/short/polluted meta descriptions, duplicates, forum descriptions
- Content Quality (on by default) - BBCode pollution, missing alt text, spam links, thin content, all-caps titles
- Internal Links (off by default) - internal broken links via HTTP HEAD requests, rate-limited at 10 per batch, default cap of 500 per scan
- External Links (off by default) - external broken links with per-domain rate limiting (100ms between same-domain requests), default cap of 5,000 per scan
- HTML Verification (off by default) - OG tags, heading structure, JSON-LD syntax, canonical URLs in rendered HTML (sample-based)
- Report core schema gaps - flag pages where XF core has no JSON-LD generation
- Theme heuristics - H1 and duplicate description checks (theme-dependent, may produce false positives)
- Soft 404 detection - detect pages that return HTTP 200 but show error content
- Batch size - configurable threads per batch (default: 200, minimum: 10). Lower for weaker hosts
- Use URL cache - toggle per-scan. Cached results don't count against request limits
- 80+ issue types across 6 categories: config (23), schema (16), html (19), content (11), link (6), meta (5)
- Impact-ranked issues - each issue gets a priority score based on severity and frequency, so the most impactful problems appear first
- Score improvement hints - shows the potential score gain per fix category (e.g., "Fix 5 critical schema issues for +50 points")
- Per-forum breakdown - table showing how many issues each forum contributes
- Delta scanning - only scans threads modified since the last completed scan, using last_post_date and post_date/last_edit_date. Falls back to a full scan if no previous scan exists. Delta scans are marked with a badge on the dashboard
- Forum/date scoping - select one or more forums and/or set a date range to narrow the scan. Scope parameters are saved with the report for reference
- URL caching - link check results cached to avoid redundant HTTP requests: 2xx cached 7 days, 4xx/5xx cached 1 day, timeouts cached 6 hours. Expired entries cleaned up automatically via daily cron
- Concurrent scan lock - only one scan can run at a time
- 50,000 issue cap per report
Run scans from the command line:
Code:
php cmd.php qubn-seoaudit:scan [options]
Flags: --delta, --forum=N, --date-from, --date-to, --external-links, --no-content, --no-schema, --no-config, --core-schema-gaps, --theme-heuristics, --no-url-cache, --soft-404, --email, --email-to
Auto-fix runs at render time via template modifications and an event listener. It does not modify your database content or core files. All auto-fix features are off by default and must be explicitly enabled. Each issue with a specific AdminCP fix includes a Fix it link that takes you straight to the right page.
- JSON-LD injection: CollectionPage (forums/categories), WebPage with publish date (static pages), WebSite + Organization (homepage). Uses JSON_HEX_TAG encoding for XSS safety
- Thread JSON-LD enrichment: Enriches XF core's native DiscussionForumPosting with commentCount, isPartOf (DiscussionForum with forum name and URL), and author fallback for deleted/banned users. No duplicate structured data - extends XF core via class extension
- BreadcrumbList JSON-LD - injects BreadcrumbList structured data on all pages that have breadcrumb navigation
- Fallback meta description - generates a meta description for forum pages and static pages that don't have one set
- OG tag gap filling - injects a fallback og:image using your site's public metadata logo URL when no og:image is present
- ALL CAPS title case correction - automatically converts thread titles with >70% uppercase characters to title case at render time
- Debug logging - when enabled, logs every auto-fix injection to a dedicated audit log table
- Audit log - records date, content type, content URL, fix type, and injected HTML for every auto-fix action. Entries auto-prune after 7 days via cron. View the log at SEO Audit > Auto-Fix Log
- A = 90+
- B = 80-89
- C = 70-79
- D = 60-69
- F = below 60
- Critical - actively harming SEO (e.g., noindex enabled globally, missing board URL, broken canonical URLs)
- Warning - significant issues that should be addressed (e.g., missing meta descriptions, broken links, duplicate titles)
- Info - suggestions and minor optimizations (e.g., short titles, missing alt text, thin content)
- Score trend chart - bar chart showing your score over the last 20 completed scans, with clickable bars to jump to any report
- Category trend chart - stacked bar chart showing issue counts by category (config, schema, meta, content, link, html) over time, with a color legend. Delta scans are marked with a badge
- Report diff - compare any report against the previous one to see new issue types, fixed issue types, and persistent issues
- Filterable and sortable - filter by category, severity, content type, and issue type. Sort by any column including impact score (severity × page views). All counts in the report header, issue summary, and per-forum breakdown are clickable links that drill down to filtered views
- Paginated - configurable per-page display (50 / 100 / 200 / 500) with per-type summary on the first page. Scan history shows 20 reports per page
- CSV export - downloads a CSV with columns: severity, category, issue type, content type, content ID, content title, content URL, detail, recommendation
- JSON export - downloads the full report as structured JSON
- Delete reports - remove any report and its associated issues
- Issue dismissal - dismiss a single issue, bulk-select multiple issues, or dismiss all issues of a specific type. Link issues are dismissed by URL hash (one dismissal covers all threads with that URL), content issues by content type + content ID, config issues by type only. Each dismissal supports an optional note. Manage all dismissals from SEO Audit > Dismissed Issues
- Scheduled scanning - configure weekly, biweekly, or monthly automatic scans via cron. The dashboard shows the current schedule and last run timestamp
- Auto-cleanup - automatically keeps the last N reports (default: 10) and deletes older ones after each scan
- Email notification - sends a scan summary email with total issues, severity breakdown, score comparison vs previous scan, and a link to the report. Triggered by the CLI --email flag or automatically on scheduled scans
- Critical issue alerts - sends a separate email when new critical issue types are detected that weren't in the previous scan, including a list of the new types and a score comparison
- Webhook notifications - sends scan results to a Discord or Slack webhook URL on completion. Payload includes score, grade, issue counts by severity, and a link to the report. Auto-detects Discord vs Slack format from the URL
- Override the severity level (critical, warning, info) of any issue type
- Disable specific issue types entirely so they're skipped during scans
- Adjust all seven detection thresholds: thin thread minimum characters, thread title minimum and maximum length, meta description minimum length, SERP title maximum length, high-traffic noindex thread count, and thin-content minimum word count
- Reachable from its own AdminCP sidebar entry and a dashboard button
- Changes apply to future scans only
- Reset all overrides to defaults with one click
- XenForo 2.3.0 or later
- PHP cURL extension (for link checking)
- Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive
- Navigate to Admin CP > Tools > Checks and tests > SEO Audit
- Run your first scan
- Optionally enable auto-fix features under the Auto-fix settings tab
- 1 class extension (DiscussionHandler for thread JSON-LD enrichment), 2 template modifications, 1 event listener
- 6 database tables (all prefixed xf_qubn_seoaudit_*): reports, issues, scan dedup, URL cache, dismissed issues, autofix log
- 4 cron entries: autofix log cleanup (daily), scheduled scan trigger, URL cache cleanup (daily), email digest
- 19 configurable options in the qubn_seoaudit option group
- Clean install and uninstall, all tables and data removed on uninstall
- PHPStan level 3 clean
- Your XenForo version
- PHP version
- Any relevant entries from xf_error_log
- Steps to reproduce the issue
Attachments