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