Saved-content SEO audits
Use Sites → site → SEO to inspect saved pages across the site's enabled languages, compare metadata and review internal links. From CMS 1.116.0, Start new audit starts consecutive short requests in this screen. Keep the tab open until execution finishes; no cron is needed. Reopening the workspace and Refresh results only read saved progress. Use Run in this screen to continue interrupted work. Findings are guidance: they never publish, redirect, delete or rewrite content, and never block publication.
For one page, use Pages → page → Page management → SEO check. The check shows rendered title and description, their translation or site fallback source, and bounded output examples. Editing links open the relevant translation field, block editor or Site Head settings where the source is known. Block links retain the selected content language. Save through the normal editor and run the check again. A source-change warning means the old results should be rechecked; an unavailable freshness check does not establish that they are current.
Starting or resuming a manual audit opens the native progress dialog. Keep the tab open. Pause and exit, Escape and the close control finish the current step and verify the saved pause. If confirmation is unavailable, use View results before starting again. Completed effects remain saved. Terminal results stay visible until you close the dialog or view results; elapsed time covers this screen session only.
Processing and scope
Manual audits advance continuously through authorized panel requests, without waiting for a minutely trigger. Navigation stops future steps and preserves committed progress. For independent continuation, enable the SEO job in Maintenance → Jobs and automation and follow its optional hosting setup instructions. The hosting account needs cron with PHP CLI, a managed scheduler, or the supported authenticated HTTP trigger for web-compatible work. A continuously running queue worker is not required for this feature. The existing CLI command also advances work explicitly:
php artisan webblocks:seo:work
The progress total includes every native page/language pair and a separate navigation-definition check for each language. It remains provisional while the inventory is being prepared. Pause and Resume preserve progress. Retry incomplete checks rechecks unavailable or partial evidence. Interrupted work is recoverable through expiring worker leases. A source change requires a new audit. Only one current active run is admitted per site, and the background worker retains ten recent runs by pruning older evidence. Starting a run never waits for cascading history deletion; older rows can remain until the worker advances.
The saved preview includes page-owned draft blocks and published Shared Slot content. Draft, review, published and archived pages can appear in the audit. Shared Slot source pages and revision restore candidates are not separate page targets. Missing page translations are reported as editorial suggestions. An absent block translation row and a site-description fallback are separate suggestions; they are not proof of complete field-level translation fidelity.
The audit records its check times, CMS version, source version and declared scope. A partial, failed, queued or stale run is not a completed result. Content changes through Laravel invalidate the recorded generation. The generation is conservative: another site's edit can also make the run stale. Independently changing external provider data, direct database edits outside Laravel and unversioned runtime changes require an explicit new check.
Review findings
Use the Findings, Pages and languages, and Internal links tabs. Filters cover source page ID, language, publication state, finding category/code and link result. Page ID 0 selects navigation-definition work. Select a prior run through the history filter.
Technical findings and editorial suggestions remain separate from unchecked evidence. Same-language pages with matching normalized rendered titles or descriptions are review candidates, including pages in different publication states. Decide whether the duplication is intentional before editing. A shared site description often produces duplicate descriptions; a page-specific translation may be more useful.
Link evidence identifies the source page/language, block or navigation item where available, link text, rendered location, native target and a suggested current URL where one can be established. Open its editing location to review the actual source. The analysis respects configured site domains, locale prefixes and public subdirectory mounts.
Results distinguish missing native targets, unpublished or access-restricted targets, language differences and native legacy/noncanonical addresses. A language difference may be intentional. A missing native target does not establish a live HTTP 404: plugin routes or redirects may handle the address. Redirect Manager history is not inspected. Automatic Pages detail prefixes and templates require record-aware inspection and are marked outside these native checks; a retained native row cannot override an active automatic prefix.
Navigation definitions are listed separately from links actually rendered on a page. A definition does not establish that its menu is placed. The no incoming links suggestion means that no link from another inspected published native source was found for that page/language. Self-links, draft sources, draft block branches, access-restricted source pages and unplaced navigation definitions do not count. The scan may omit real sources, so review its scope before adding links or changing content.
HTML inspection is limited to 2 MiB and 20,000 elements. Each page records up to 2,000 rendered links, and each language records up to 2,000 visible navigation definitions. Truncation is explicit and produces partial evidence. Link evidence omits query strings, fragments and URL credentials. External targets, live HTTP status, redirect chains, robots.txt, sitemap inclusion, scripts, iframe content and Google indexing/performance are not checked. Findings are not a ranking score or a promise of traffic gains.
Internal Content API
All audit endpoints require content.read. Session and personal-token access also requires cms.pages.read, cms.navigation.read and cms.shared-slots.read for the site. Token capabilities and allowed-site lists remain upper bounds. The requested audit must belong to the URL's site.
| Operation | Endpoint | Behavior |
|---|---|---|
| Read results | GET /webadmin/api/sites/{site}/seo-audits | Passive read of the latest run, history and paginated evidence |
| Request a run | POST /webadmin/api/sites/{site}/seo-audits | Returns 202 with the queued or existing active run; does not inspect in the request |
| Pause/resume/retry | POST /webadmin/api/sites/{site}/seo-audits/{seoAudit}/{action} | action is pause, resume or retry; invalid transitions return 409 |
| Check page-report freshness | GET /webadmin/api/pages/{page}/seo-check/freshness?locale=en&source_version=... | Uses the individual page check's access rules and returns stale without rendering |
Result filters are audit, locale, page_id, status, category, code and link_state. per_page accepts 1–100 and defaults to 25. pages_page, findings_page and links_page paginate the three evidence collections independently. Responses are private/no-store and noindex. audit.complete is true only for a finished, current run within the declared scope; publication_blocked stays false. Link rows expose is_public_source so consumers can distinguish saved-only evidence from published incoming sources.
See Internal Content API for normal page, translation and block edits, and SEO Fields, Social Image, And Favicon for metadata authoring.