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
| Card | Metric | Severity color |
|---|---|---|
| AI Meta Suggestions | Pending review count (+ failed count if any) | Amber if pending > 0 |
| Hreflang Health | Errors + warnings count + last scan timestamp | Red if errors, amber if warnings, green otherwise |
| Index Budget Audit | Errors + warnings + info count + last scan timestamp | Red / amber / green / grey |
| URL Relationships | Total custom canonical/hreflang mappings | Grey (informational) |
Each card is a clickable link to its grid.
Configuration
Stores → Configuration → SEO Suite → Admin Dashboard
| Field | Default |
|---|---|
| Show SEO Suite Health widget on the Magento dashboard | Yes |
| Add an admin notification when audits detect errors | Yes |
| 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::baseACL 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.