Dashboard
SEO Suite -> Dashboard (seosuite/dashboard, also the plugin's index
page) gives an at-a-glance summary of every module and, when configured, a
real-user Core Web Vitals trend from the Chrome UX Report.
The dashboard is built from a fixed set of modules
(DashboardService::buildModules()); there is currently no way to add or
remove cards from the CP, only to drag/reorder and resize them (layout is
saved per-installation via seosuite/dashboard/save-layout into
Settings::$dashboardLayout).
KPI cards
| Card | Reflects |
|---|---|
| Active integrations | Count of modules with status configured or partial out of all modules registered in ModuleRegistryService::getAllModules(). |
| Events tracked (30 days) | Whether Google Analytics is enabled and a Measurement ID is set (no live event count yet -- see below). |
| Page views (30 days) | Same GA4-connected check as above. |
| Schema markup errors | Whether Schema Markup is enabled. |
| GTM container | Whether Google Tag Manager is enabled and a container ID is set. |
| Pages with schema | Same Schema Markup check as above. |
| Social pixels active | Count of the four social pixel modules (Facebook, Pinterest, LinkedIn, X/Twitter) that are not disabled. |
| Pixel events (30 days) | Whether Facebook Pixel is enabled. |
| Hotjar sessions (30 days) | Whether Hotjar is enabled. |
| Search Console | Whether Search Console is enabled and a verification token is set. |
This card set replaced the plugin's previous integration status table as of
v1.4.1. Cards whose title says "(30 days)" or "errors" show their status
label (e.g. GA4 connected, GTM not configured) but not yet a live number
-- the value is null until the corresponding analytics/error-count
integration is wired up. Treat those cards as connection status, not a
usage count, until a future release adds real metrics.
An Events trend -- last 30 days chart card is also present as a placeholder (flat zero series); it will show real event volume once GA4 event counts are wired in.
Google CrUX (Core Web Vitals) history
When Google CrUX is configured in Settings, three additional chart cards appear:
- LCP -- Largest Contentful Paint (p75, s)
- INP -- Interaction to Next Paint (p75, ms)
- CLS -- Cumulative Layout Shift (p75)
Each chart plots up to 25 months of the site's p75 (75th percentile)
history for that metric, plus a Latest p75 and a Rating (Good /
Needs improvement / Poor) using the standard Core Web Vitals
thresholds:
| Metric | Good | Needs improvement | Poor |
|---|---|---|---|
| LCP | < 2.5 s | < 4 s | >= 4 s |
| INP | < 200 ms | < 500 ms | >= 500 ms |
| CLS | < 0.1 | < 0.25 | >= 0.25 |
If CrUX isn't configured, or Google has no CrUX data for the configured origin (low-traffic sites are often not covered), the three cards still render but with empty charts and no rating.
Configuring CrUX
SEO Suite -> Settings -> Google CrUX (seosuite/settings/google-crux):
- Toggle Enable Chrome UX Report on.
- CrUX API Key -- a free API key from Google Cloud Console with the
Chrome UX Report API enabled. Supports environment variable
suggestions (
suggestEnvVars), so$CRUX_API_KEYworks here. - Domain (origin) -- the exact CrUX origin to query, e.g.
https://example.com. Must include the scheme and have no trailing slash, and must match a real Chrome UX Report origin.
Data is fetched from the CrUX History API
(https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord) and
cached for 24 hours per domain (GoogleCruxService, cache key
seosuite.crux.history.<md5(domain)>). A failed or non-200 API response
(bad key, unknown origin, network error) is logged to the seosuite log
category and simply renders empty charts -- it does not surface an error in
the CP.
Permissions
The dashboard route requires the accessPlugin-yui-seosuite permission
(DashboardController::getPermission()), the same permission used for the
rest of the plugin's CP.