Skip to main content
Version: 2.0.0

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

CardReflects
Active integrationsCount 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 errorsWhether Schema Markup is enabled.
GTM containerWhether Google Tag Manager is enabled and a container ID is set.
Pages with schemaSame Schema Markup check as above.
Social pixels activeCount 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 ConsoleWhether 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:

MetricGoodNeeds improvementPoor
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):

  1. Toggle Enable Chrome UX Report on.
  2. 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_KEY works here.
  3. 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.