Skip to main content

Dashboard widget

A four-card summary at the top of the Magento admin dashboard (Dashboard → Home) showing the current state of every SEO Suite area.

What it shows

CardMetricSeverity color
AI Meta SuggestionsPending review count (+ failed count if any)Amber if pending > 0
Hreflang HealthErrors + warnings count + last scan timestampRed if errors, amber if warnings, green otherwise
Index Budget AuditErrors + warnings + info count + last scan timestampRed / amber / green / grey
URL RelationshipsTotal custom canonical/hreflang mappingsGrey (informational)

Each card is a clickable link to its grid.

Configuration

Stores → Configuration → SEO Suite → Admin Dashboard

FieldDefault
Show SEO Suite Health widget on the Magento dashboardYes
Add an admin notification when audits detect errorsYes
Enable nightly Index Budget audit (cron)No
Enable nightly Hreflang scan (cron)No

The widget renders only when:

  • widget_enabled = Yes
  • The current admin user has the Byte8_SeoSuite::base ACL resource

Why turn the cron audits on

Without cron, the audit grids only update when an admin clicks Run on each one. Counts in the dashboard widget go stale fast:

  • Hreflang Health → only updated when someone clicks Run Scan
  • Index Budget Audit → only updated when someone clicks Run Audit

With cron enabled, both audits run nightly (02:00 and 02:30), the grids stay current, and the dashboard widget reflects yesterday's state every morning.

Admin notifications

When notify_on_errors = Yes AND a cron-driven scan finds errors, the SEO Suite posts to Magento's standard admin notification inbox via Magento\Framework\Notification\NotifierInterface. Admins see a counter badge on the bell icon in the top-right of the admin and a notification entry titled e.g. "SEO Suite: Hreflang scan found 3 error(s)".

Non-cron runs (manual click on Run Scan) do not post notifications — the admin is already on the relevant page so the notification would be redundant.

Performance

Each card calls one SELECT COUNT(*) against its respective table. On a healthy database with proper indexes (which the schema provides), the widget adds <50ms to dashboard render time even with millions of rows in the audit tables.

If you see noticeable slowdown, check:

EXPLAIN SELECT COUNT(*) FROM byte8_seosuite_meta_suggestion WHERE status = 'pending';
EXPLAIN SELECT COUNT(*) FROM byte8_seosuite_hreflang_issue WHERE resolved = 0 AND severity = 'error';
EXPLAIN SELECT COUNT(*) FROM byte8_seosuite_index_issue WHERE resolved = 0 AND severity = 'error';

All three should use the indexes shipped in db_schema.xml. If they're not, run bin/magento setup:db-schema:upgrade to recreate them.

Hyvä admin

Pure inline CSS + standard HTML — no Knockout, no JS. Renders identically on Hyvä admin themes.

Customising

The block class is Byte8\SeoSuite\Block\Adminhtml\Dashboard\Summary and the template is view/adminhtml/templates/dashboard/summary.phtml. To override the layout (e.g. add a custom card), copy the phtml into your theme:

app/design/adminhtml/<Vendor>/<theme>/Byte8_SeoSuite/templates/dashboard/summary.phtml

The SummaryProvider (Byte8\SeoSuite\Model\Dashboard\SummaryProvider) is also a clean place to plugin if you want to add new metrics — it has one method per data source.

Removing the widget

widget_enabled = No

The block stays registered but the layout's ifconfig skips rendering. No code changes, no DI changes.