From 8fd81e3a163dc2f892f946440d051aa9ae173b76 Mon Sep 17 00:00:00 2001 From: Maciej Pienczyn Date: Sun, 8 Feb 2026 19:08:21 +0100 Subject: [PATCH] fix(gsc): Support domain property format (sc-domain:) in Search Console The site was added as a domain property in GSC, not URL prefix. _normalize_site_url() now tries sc-domain:example.com variant. Also added ctr/position to top_queries for template display. Co-Authored-By: Claude Opus 4.6 --- search_console_service.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/search_console_service.py b/search_console_service.py index 90c7b32..633b79f 100644 --- a/search_console_service.py +++ b/search_console_service.py @@ -67,10 +67,20 @@ class SearchConsoleService: else: variants.append(v.replace('://', '://www.')) + # Domain property variant (sc-domain:example.com) + from urllib.parse import urlparse + parsed = urlparse(url) + domain = parsed.hostname or '' + if domain.startswith('www.'): + domain = domain[4:] + if domain: + variants.append(f'sc-domain:{domain}') + for v in variants: if v in site_urls: return v + logger.debug(f"No match for {url}. Available sites: {site_urls}") return None def get_search_analytics(self, site_url: str, days: int = 28) -> Dict: @@ -122,7 +132,13 @@ class SearchConsoleService: ) if resp_q.status_code == 200: result['top_queries'] = [ - {'query': r['keys'][0], 'clicks': r.get('clicks', 0), 'impressions': r.get('impressions', 0)} + { + 'query': r['keys'][0], + 'clicks': r.get('clicks', 0), + 'impressions': r.get('impressions', 0), + 'ctr': round(r.get('ctr', 0) * 100, 2), + 'position': round(r.get('position', 0), 1), + } for r in resp_q.json().get('rows', []) ]