Skip to main content

v2.11.0 — Google Search Console integration

· 4 min read
Magento + commerce specialists

The biggest single shift in the suite's positioning since v2.0. Until now we've been a config tool — turning knobs in admin to fix Magento's SEO defaults. With v2.11 we start being a monitoring product too.

Why this matters

Every other feature in the suite is "I changed something — did it help?" without an answer. Meta templates, AI generator, hreflang fixes, layered-nav noindex, OOS rules — all of it produces a change you can't easily measure unless you keep a Search Console tab open in another browser.

GSC integration closes that loop. The dashboard widget gains a 7-day clicks/impressions card that sits next to the audit counts. The new GSC Performance grid lets you sort URLs by impressions, by clicks, by position-trying-to-break-into-page-1. Every editor decision now has a feedback signal.

What ships

Daily sync

Cron byte8_seosuite_gsc_sync runs at 04:30 (just after the 404 auto-healer). For every enabled store, it pulls impressions / clicks / CTR / position per URL per device per day from the Search Analytics API into a new byte8_seosuite_gsc_metrics table.

Bulk-upsert keyed on (store_id, url_hash, metric_date, device) so re-runs over an overlapping window safely overwrite — important because GSC backfills today's data for ~48 hours after the date passes.

Two auth modes

auth_mode = service_account   ← recommended for agencies
auth_mode = oauth ← when end users own the property

Service account: Create a SA in Google Cloud, download its JSON key, paste into Magento, share the SA email with your Search Console property as a Restricted user. No browser consent dance. Same SA can be added to any number of client GSC properties — agency-friendly.

OAuth: Standard client_id + client_secret + refresh_token flow. More setup but more familiar for end-users who want to grant access from their own Google account.

Both modes encrypt credentials via Magento's standard core_config_data encryption.

Access token caching

Tokens are cached for 50 minutes (Google's are 60-min lived) so subsequent API calls within the same cron run reuse the same token. Per-store cache key — different stores can use different credentials cleanly.

Admin grid

Marketing → SEO Suite → GSC Performance — sortable by date / impressions / clicks / CTR / position; date-range filterable; full-text URL search. Toolbar Sync Now for inline triggers without waiting for cron.

Dashboard widget gains a 5th card

┌──────────────┬──────────────┬──────────────┬──────────────┬──────────────┐
│ AI Meta │ Hreflang │ Index Budget │ URL Rels │ GSC (7d) │
│ 12 pending │ 0 errors │ 3 errors │ 47 mappings │ 2,318 clicks │
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┘

Card status:

  • Grey "Not synced yet" before the first sync
  • Green when clicks > 0
  • Always links straight to the GSC Performance grid

CLI

bin/magento seosuite:gsc:sync                  # all enabled stores
bin/magento seosuite:gsc:sync -s 1 # specific store
bin/magento seosuite:gsc:sync -l 28 # 28-day backfill

Useful right after enabling: do a 90-day backfill to populate the dashboard immediately:

bin/magento seosuite:gsc:sync -l 90

Performance

A typical store with ~5000 indexed URLs over a 7-day window produces 30k–80k metric rows. Bulk-upsert is chunked at 1000 rows per query — even huge catalogs stay under MySQL's max_allowed_packet default. Daily cron typically completes in 10–30 seconds end-to-end.

Cron schedule (now 7 jobs)

*/30 * * * *  byte8_seosuite_ai_auto_generate
0 2 * * * byte8_seosuite_index_audit
30 2 * * * byte8_seosuite_hreflang_scan
0 3 * * * byte8_seosuite_oos_rules
30 3 * * * byte8_seosuite_purge_404_log
0 4 * * * byte8_seosuite_404_auto_heal
30 4 * * * byte8_seosuite_gsc_sync ← new

The 04:30 slot puts GSC sync after the auto-healer — by the time the dashboard widget is read in the morning, both the audit counts and the GSC metrics reflect yesterday's state.

What's NOT in this release

Punted to v2.11.x and later:

  • URL Inspection API — programmatically request indexing for new product URLs. Needs read-write OAuth scope and a per-product action button. Roadmapped as a follow-up release.
  • GSC corpus into the auto-healer — feed GSC's "Discovered URLs" into the 404 auto-heal corpus to widen what it can match against. Currently the corpus is url_rewrite-only; this is the natural next leverage point.
  • Per-product GSC chip on product/category edit forms showing 28-day impressions/clicks. Nice-to-have demo moment for v2.11.x.

What's next

  • v2.11.x: URL Inspection API, GSC corpus into the auto-healer, per-product GSC chip
  • v2.12: Single Canonical Product URL — replaces Amasty's standalone module; closes the canonical_config audit loop with a one-click fix
  • v2.13: Sitemaps (HTML + image + video + hreflang-in-XML)
  • v2.14: Pagination SEO controls
  • v2.15+: Schema Composer, AI image alt-text, Core Web Vitals bridge

Migration

Pure additive. New table byte8_seosuite_gsc_metrics, new cron, new admin grid + menu, new CLI, new config group, new dashboard card. All gated by the master switch off by default.

composer update byte8io/magento-seosuite
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush

Then enable in Stores → Configuration → SEO Suite → Google Search Console and paste your service account JSON.

— The Byte8 team