Skip to content
EVE Milano Consulenza SEO

EveMilano Logo White EveMilano Logo White

Il click-through rate è ancora una delle metriche più richieste in audit Google Ads, ma il modo in cui si misura, si diagnostica e si ottimizza è cambiato radicalmente dal 2022 in poi: gli Expanded Text Ads sono stati dismessi il 30 giugno 2022, gli annunci Search vivono dentro i Responsive Search Ads (RSA), le estensioni si chiamano asset e Performance Max ha assorbito Smart Shopping e Local. In questo contesto, alzare il CTR senza danneggiare CVR e ROAS richiede un approccio da audit: capire dove il CTR agisce nel modello d’asta, diagnosticare la causa di un valore basso e applicare leve mirate su Search RSA, asset e Performance Max. Questa guida raccoglie il framework che uso negli audit PPC e i pattern di reporting via Google Ads API e BigQuery che permettono di andare oltre i limiti dei report UI.

[PLACEHOLDER FEATURED IMAGE — Diagramma “Anatomia di Ad Rank 2026”: i 5 fattori (Bid, Quality Score, Ad Rank thresholds, Auction context, Expected impact from assets) e dove agisce il CTR. Sostituire con immagine diagrammatica orizzontale 1200×628.]

CTR nel 2026: definizione operativa e dove agisce davvero

Nel pannello Google Ads il CTR viene mostrato come clicks / impressions, ma per fare diagnosi seria conviene scomporlo per surface e top vs other. Lo stesso annuncio in posizione 1 (“Top”) e in posizione 5 (“Other”) ha CTR strutturalmente diversi: confrontarli aggregati è una delle prime cause di conclusioni sbagliate durante un audit.

  • Search Top vs Other: il segmento Top vs. Other nei report di Google Ads separa il volume in cima alla SERP da quello in altre posizioni. Un CTR aggregato 3% con 70% di impression in posizione Other nasconde un CTR Top che potrebbe essere a 8% o 1%: due scenari opposti.
  • Search Partners: le impression dei partner di ricerca hanno un CTR strutturalmente più basso e non concorrono al Quality Score. Vanno escluse dall’analisi di benchmark.
  • Brand vs non-brand: il CTR brand (30–60%) è una proxy della SERP feature visibility e del riconoscimento del marchio. Il CTR non-brand (1–4% medio Search) misura davvero la qualità di copy e match. Aggregare i due distorce qualsiasi conclusione.
  • Device e geo: in segmenti mobile la presenza di Call asset, Lead Form asset e Image asset modifica fortemente il CTR. Lo stesso vale per le ricerche geolocalizzate con Location asset.

Il CTR non è una KPI isolata: è un proxy che alimenta tre meccaniche dell’asta. Capire dove agisce è il prerequisito per decidere se vale la pena ottimizzarlo o se è una vanity metric in un setup conversion-driven.

  1. Ad Rank: il CTR storico e atteso alimenta direttamente il componente Expected CTR del Quality Score, che entra nella formula di Ad Rank in tempo reale.
  2. Costo per click effettivo (eCPC): con auction-time bidding, una keyword con QS più alto paga meno per la stessa posizione. Il CTR è uno dei segnali principali che Google usa per stimare la qualità.
  3. Smart Bidding: Maximize Conversions, tCPA e tROAS usano il CTR come feature implicita per modellare la probabilità di click qualificato, non come obiettivo diretto. Ottimizzare solo per CTR sotto Smart Bidding può portare a un disallineamento col modello.

Per le campagne Dynamic Search Ads e Performance Max questa scomposizione è ancora più importante, perché il CTR aggregato somma surface eterogenee (Search, Shopping, Display, YouTube, Discover, Maps) e diventa di fatto inutilizzabile.

Anatomia di Ad Rank e Quality Score 2026

La documentazione ufficiale di Google su Ad Rank elenca cinque fattori che determinano la posizione e l’idoneità all’asta a ogni singola query:

  • Bid (massimo o target di Smart Bidding tradotto in bid-equivalent in asta)
  • Quality of the ad and landing page (Quality Score, calcolato in tempo reale, non quello visibile in UI)
  • Ad Rank thresholds (soglie minime di idoneità, variabili per query/intent/dispositivo/posizione)
  • Context of the person’s search (location, device, ora, search history, intent)
  • Expected impact of assets and other ad formats (stima del contributo che asset e formati daranno all’engagement)

Il punto critico, spesso ignorato, è che il Quality Score visibile in UI (1–10 per keyword) è una stima diagnostica a 90 giorni, non il valore usato in asta. Google calcola un QS dinamico per ogni singola asta, basato su query, contesto utente, asset disponibili e match type. Un QS 7 in UI può corrispondere a un QS effettivo molto diverso in asta, soprattutto su keyword broad con Smart Bidding.

I tre componenti del Quality Score, secondo la guida ufficiale, sono diagnosticati con status Above average / Average / Below average in UI:

ComponenteCosa misuraCosa puoi controllare
Expected CTRProbabilità che la keyword riceva click se mostrata, normalizzata per posizione e formatoAd copy (headline + description), asset coverage, match type, query coverage tramite RSA
Ad RelevanceQuanto l’ad text è semanticamente allineato all’intent della queryGranularità degli ad group (SKAG o tematici), keyword nelle headline, search themes in PMax
Landing Page ExperienceRilevanza, trasparenza, navigabilità, Core Web Vitals, mobile-friendlySpeed (LCP, CLS, INP), corrispondenza intent ↔ contenuto, conversion path, policy compliance

Il CTR agisce direttamente su Expected CTR e indirettamente su Ad Relevance: ad copy che attrae click coerenti rinforza entrambi. Sul componente Landing Page Experience, invece, il CTR non ha leverage diretto: serve lavorare sulla pagina di destinazione, dove un audit tecnico SEO porta benefici trasversali. Per un approfondimento metodologico sul Quality Score storico vedi la guida dedicata a come migliorare il Quality Score di Google Ads.

[PLACEHOLDER IMMAGINE — Diagramma a blocchi: i 3 componenti del Quality Score con le rispettive leve di controllo e i fattori di asta. Layout verticale.]

Framework di diagnosi: perché il CTR è basso

Davanti a un CTR sotto benchmark, evito di partire da “riscriviamo le headline”. L’esperienza su decine di audit dimostra che nella maggior parte dei casi il problema sta in 6 assi specifici, da verificare in ordine. Saltare i primi punti e mettere mano subito all’ad copy è l’errore più frequente che vedo.

  1. Auction context: prima di tutto guarda Auction Insights. Se la Impression Share è sotto il 30% e l’Absolute Top IS è sotto il 10%, il CTR è basso perché stai mostrando ads in posizioni Other, non perché il copy è debole. La diagnosi va su bid, budget e quality, non sulle headline. Vedi la guida sulla quota impressioni di Google Ads.
  2. Brand vs non-brand: separa i dati. Se l’ad group mescola “nome brand” e keyword generiche, il CTR brand maschera il problema. Filtra per search_term NOT LIKE '%brand%' prima di valutare.
  3. Intent mismatch dal match type: keyword broad senza Smart Bidding, o broad con conversion data insufficienti, generano impression su query irrilevanti. Il CTR cala. Il fix è restringere a phrase/exact, non riscrivere copy. Per il dettaglio operativo c’è la guida sulla corrispondenza delle parole chiave.
  4. Asset coverage insufficiente: un RSA con 6 headline e 2 description e zero asset Sitelink/Callout/Image è penalizzato in Ad Strength e ha visibilità ridotta nelle SERP. Conta gli asset.
  5. Ad Strength: status Poor o Average sui RSA principali. Google segnala esplicitamente i suggerimenti di miglioramento (più headline, più asset, più diversificazione).
  6. Search terms vs keyword: il Search Terms Report rivela il delta tra ciò che stai bidando e ciò che gli utenti cercano davvero. Patterns ricorrenti che non matchano l’ad copy sono il sintomo più diretto di intent mismatch.

Lo snippet seguente è il punto di partenza che uso negli audit: estrae il CTR per ad group con i segmenti Top vs Other e search term match type, isolando i problemi di posizione da quelli di copy. Richiede google-ads-python versione 24+ e API v18.

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_storage("google-ads.yaml")
ga_service = client.get_service("GoogleAdsService")

query = """
    SELECT
        campaign.name,
        ad_group.name,
        segments.search_term_match_type,
        segments.slot,
        metrics.impressions,
        metrics.clicks,
        metrics.ctr,
        metrics.average_cpc,
        metrics.conversions,
        metrics.conversions_value
    FROM ad_group
    WHERE
        segments.date DURING LAST_30_DAYS
        AND campaign.advertising_channel_type = 'SEARCH'
    ORDER BY metrics.impressions DESC
"""

customer_id = "1234567890"  # senza trattini
stream = ga_service.search_stream(customer_id=customer_id, query=query)

for batch in stream:
    for row in batch.results:
        print(
            row.campaign.name,
            row.ad_group.name,
            row.segments.search_term_match_type.name,
            row.segments.slot.name,         # SEARCH_TOP / SEARCH_OTHER / SEARCH_SIDE
            row.metrics.impressions,
            row.metrics.clicks,
            f"{row.metrics.ctr:.4f}",
            row.metrics.conversions,
        )

Il segmento segments.slot permette di calcolare il CTR Top isolato da Other: è la prima vista che produco in qualsiasi audit. Senza questa scomposizione il valore aggregato non dice nulla di utile.

[PLACEHOLDER IMMAGINE — Decision tree “CTR basso, quale leva muovere”: flow chart a 6 livelli con auction context → brand split → match type → asset coverage → ad strength → search terms. Sostituire con diagramma generato.]

Lever 1: Search RSA, massimizzare Ad Strength e asset combinations

Gli ETA (Expanded Text Ads) sono stati dismessi il 30 giugno 2022. Da quella data, l’unico formato Search disponibile è il Responsive Search Ad: fino a 15 headline (30 caratteri ciascuna) e 4 description (90 caratteri ciascuna). Google compone in tempo reale combinazioni di 2–3 headline e 1–2 description in base alla query, agli asset attivi e alla cronologia di performance.

Pinning strategy: quando bloccare e quando lasciare libero

Il pinning fissa una headline o description in una posizione specifica (1, 2 o 3 per le headline; 1 o 2 per le description). Riduce le combinazioni che Google può testare e quindi può diminuire l’Ad Strength e il CTR. È giustificato solo in tre casi:

  • Compliance regolatoria: settori farmaceutico, finanziario, gambling, dove serve garantire che il disclaimer compaia in posizione fissa.
  • Brand mandatory: il brand deve apparire in headline 1 per policy del cliente.
  • Prezzo o offerta vincolante: il prezzo deve essere mostrato per evitare claim ingannevoli.

Quando si pinna, è prassi pinnare più di una headline alla stessa posizione (3–4 headline pin a posizione 1): Google sceglie tra queste mantenendo le combinazioni testabili. Il pinning di una singola headline a posizione 1 è il pattern peggiore e va evitato.

Asset diversification: 5 categorie da coprire

Un RSA con 15 headline tutte simili ottiene Ad Strength Good ma genera poche combinazioni utili. La diversificazione è la leva che alza Ad Strength fino a Excellent e dà a Google materiale per testare combinazioni efficaci. Le 5 categorie da bilanciare:

  • Query mirroring: 3–4 headline che includono la keyword principale o sue varianti. Aumentano Ad Relevance.
  • USP / value proposition: 3–4 headline su benefit specifici (consegna 24h, garanzia 2 anni, made in Italy, certificazioni).
  • Numeric / prove sociali: 2–3 headline con numeri concreti (oltre 10.000 clienti, +50% performance, 4,8/5 su Trustpilot).
  • Emotional / curiosity: 2–3 headline su trigger di intent (scopri come, guida pratica, prova gratuita).
  • Call-to-action espliciti: 2–3 headline con CTA differenziati (richiedi preventivo, scarica demo, prenota consulenza).

Ad customizer e funzioni dinamiche

Gli ad customizer permettono di iniettare valori dinamici in headline e description. Vanno usati con parsimonia perché ogni placeholder consuma caratteri nei limiti di 30/90 in caso di mancato match. Le funzioni utili:

  • {KeyWord:fallback} — Dynamic Keyword Insertion. Insert della keyword in match, con fallback testuale se la keyword supera i 30 caratteri.
  • {COUNTDOWN("2026-12-25 23:59:59")} — Countdown a evento, utile per saldi e campagne stagionali. Refresh continuo lato Google.
  • {IF(device=mobile,Chiama ora):Visita il sito} — Funzione IF per differenziare il copy in base a device o lista audience.
  • {LOCATION(City):Italia} — Location insertion da query geolocalizzata.
  • Custom feed asset: parametri custom (prezzi, stock, varianti) caricati via feed e iniettati in tempo reale.

Asset reporting: leggere i label Google

Google etichetta le performance dei singoli asset con 4 livelli: Best, Good, Low, Learning, più Unrated (volume insufficiente). Il bias da low volume è enorme: un asset con 800 impressioni può restare Learning per settimane, e quelli marcati Low spesso lo sono per posizione e contesto, non per qualità intrinseca del testo.

La regola operativa: non sostituire asset Low prima di 2.000 impressioni e prima di aver verificato che il low non sia spiegato dalla combinazione casuale con asset deboli (Google testa permutazioni). Per un’analisi più robusta bisogna passare dal report UI al dataset BigQuery di Google Ads Data Transfer, dove le impression per combinazione asset sono granulari.

-- BigQuery: asset performance per ad group con segment Top vs Other
-- Dataset: google_ads_ (Google Ads Data Transfer)
-- Tabelle: AssetGroupAssetStats per PMax, ad_group_ad_asset_view per Search

WITH asset_stats AS (
  SELECT
    a.AssetId,
    a.AssetName,
    a.AssetTextContent,
    aga.AdGroupId,
    aga.PerformanceLabel,
    aga.FieldType,         -- HEADLINE, DESCRIPTION, SITELINK, CALLOUT, ...
    SUM(s.Impressions) AS impressions,
    SUM(s.Clicks) AS clicks,
    SAFE_DIVIDE(SUM(s.Clicks), SUM(s.Impressions)) AS ctr
  FROM `project.google_ads_dataset.Asset_123` a
  JOIN `project.google_ads_dataset.AdGroupAdAsset_123` aga
    ON a.AssetId = aga.AssetId
  JOIN `project.google_ads_dataset.AdGroupAdAssetStats_123` s
    ON s.AssetId = a.AssetId
   AND s._DATA_DATE BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) AND CURRENT_DATE()
  GROUP BY 1,2,3,4,5,6
)
SELECT *
FROM asset_stats
WHERE impressions >= 2000
ORDER BY ctr DESC;

Il filtro impressions >= 2000 è la soglia minima sotto cui evito di prendere decisioni di sostituzione. La struttura dei dataset esposti dal Data Transfer è documentata nella guida ufficiale Google Cloud.

Lever 2: asset playbook 2026

Gli asset (ex estensioni) sono la leva con il miglior rapporto effort/risultato per alzare CTR. Aumentano lo spazio visivo dell’annuncio nella SERP, danno a Google più segnali per Ad Strength e attivano formati ricchi (Image, Lead Form, Promotion). Vanno configurati a livello di account (default), campagna (override) e ad group (specifici).

La tabella seguente è il riferimento aggiornato 2026 sui tipi di asset, dove si attivano e qual è il numero minimo consigliato per ottenere Ad Strength Excellent:

AssetSearch RSAPerformance MaxDemand GenMin consigliato
Sitelink6–8 attivi
Callout10 attivi
Structured Snippet2 header × 4 valori
Image5+ in formati 1:1 e 1.91:1
Lead Form1 per intent specifico
Promotion1 per offerta attiva
Price3+ price item
Call1 per geo
Locationcollegato a GBP
Business Logo1 (1:1, 128×128 min)
Business Name1 (25 char max)
App1 per app
Dynamic Sitelink/Callout/Snippet✓ (auto)✓ (auto)auto, opt-in account

Tre osservazioni operative su asset specifici, ricavate da audit ricorrenti:

  • Image asset: in Search dal 2022, sono uno degli asset più sottoutilizzati. L’incremento medio di CTR osservato negli audit è del 3–8% in settori con prodotto visuale (fashion, home, food). Servono almeno 5 immagini in 1:1 e 1.91:1, evitando testo embedded (policy Google).
  • Business Logo + Business Name: introdotti nel 2023, sono asset brand-level che danno un’identità visiva alla SERP simile a un risultato organico ricco. Andrebbero attivati su qualsiasi account riconoscibile come brand.
  • Dynamic asset (automatici): Google genera sitelink, callout, structured snippet e image partendo dal sito. Il trade-off è chiaro: copertura immediata ma minor controllo. In campagne brand vanno disattivati; in non-brand con budget limitato attivarli accelera il warm-up.

[PLACEHOLDER IMMAGINE — Screenshot annotato della UI Asset di Google Ads, con frecce sui campi: tipo asset, livello (account/camp/ad group), performance label. Da catturare da un account reale e anonimizzare.]

Asset combinations report

Il report Combinazioni asset sotto ogni RSA mostra le combinazioni effettive (headline + description scelte) con impression e percentuale di servizio. È l’unica vista che permette di capire cosa Google sta davvero pubblicando e quali combinazioni dominano lo spend. Lo uso per due check:

  • Concentrazione: se 1–2 combinazioni catturano >50% delle impression, Google ha già scelto un winner e le altre combinazioni non hanno volume per essere valutate. Va bene se il CTR è alto; va male se è basso e impedisce di testare alternative (in quel caso, aggiungere asset nuovi per forzare nuove permutazioni).
  • Coverage: se ci sono asset attivi che non compaiono mai in combinazioni, vanno pausati. Probabilmente sono valutati internamente come Low e Google non li serve.

Lever 3: Performance Max, dove il CTR conta e dove no

Performance Max ha assorbito Smart Shopping e Local nel 2022 e dal 2023 è diventato il formato push principale di Google per gli inserzionisti. La struttura è radicalmente diversa: un singolo asset group serve simultaneamente Search, Shopping, Display, YouTube, Discover, Gmail e Maps. Il CTR aggregato di una campagna PMax somma queste surface e diventa di fatto inutilizzabile come metrica.

Il punto critico per chi viene da Search puro è capire dove il CTR ha ancora senso in PMax e dove invece va completamente subordinato a CVR e ROAS. Le aree dove guardare il CTR:

  • Asset reporting per surface: la tab Insights e il report Asset Group mostrano performance separate per Search, Shopping, Display, Video. Il CTR Search dentro PMax è confrontabile con quello di Search RSA.
  • Asset combinations: identico a RSA, mostra quali combinazioni di headline/description/image stanno dominando.
  • Search Themes (rollout 2023–2024): segnali keyword-like che indicano a PMax verso quali query orientarsi. Non sono keyword, sono topic. Best practice: 3–7 search theme per asset group, allineati ai search term reali ricavati da Search Terms Insight.

Aree dove il CTR è una distrazione:

  • CTR aggregato campagna: somma Display + YouTube (CTR strutturalmente bassi) + Search + Shopping. Confronta apples to oranges. Ignorarlo.
  • CTR Display dentro PMax: le impression Display sono inflate dai placement automatici. Il CTR è basso per natura e ottimizzarlo deteriora la copertura conversion-driven.

Brand exclusions: il fix più importante

PMax di default cattura search brand. Questo gonfia CTR e ROAS dichiarati della campagna PMax e canibalizza la campagna Brand Search dedicata, falsando l’attribution. La best practice 2026 è isolare il brand:

  1. Mantenere una campagna Search Brand dedicata con keyword esatte.
  2. Aggiungere Brand exclusions a livello PMax con tutte le varianti brand.
  3. Monitorare la quota di search brand catturata da PMax dopo l’esclusione (tramite Auction Insights della campagna Brand).

L’effetto tipico: il CTR PMax dichiarato scende di 5–15 punti percentuali, ma il CTR vero sulla parte non-brand emerge pulito ed è quello su cui ottimizzare. Per il dettaglio del fenomeno di sovrapposizione, vedi la guida sulla cannibalizzazione tra campagne e canali.

Search Terms Insight in PMax

Diversamente da Search, PMax non espone i search term puntuali ma li raggruppa per category label per motivi di privacy. La risorsa API campaign_search_term_insight espone questi aggregati. Lo snippet seguente estrae le category con metriche, utile per capire dove sta convertendo PMax e verificare la coerenza con le search theme dichiarate.

# Estrazione Search Term Insight per Performance Max
# Google Ads API v18, google-ads-python 24.x

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_storage("google-ads.yaml")
ga_service = client.get_service("GoogleAdsService")

query = """
    SELECT
        campaign.id,
        campaign.name,
        campaign_search_term_insight.id,
        campaign_search_term_insight.category_label,
        metrics.impressions,
        metrics.clicks,
        metrics.ctr,
        metrics.conversions,
        metrics.conversions_value
    FROM campaign_search_term_insight
    WHERE
        segments.date DURING LAST_30_DAYS
        AND campaign.advertising_channel_type = 'PERFORMANCE_MAX'
    ORDER BY metrics.impressions DESC
"""

customer_id = "1234567890"
stream = ga_service.search_stream(customer_id=customer_id, query=query)

for batch in stream:
    for row in batch.results:
        print(
            row.campaign.name,
            row.campaign_search_term_insight.category_label,
            row.metrics.impressions,
            row.metrics.clicks,
            f"{row.metrics.ctr:.4f}",
            row.metrics.conversions,
        )

L’output va incrociato con le search theme dichiarate: se ci sono category che generano conversioni e non sono coperte dalle search theme, si aggiungono. Se ci sono category irrilevanti o off-topic, si aggiungono negative keyword a livello account (disponibili dal 2023) o si rivedono le audience signal.

AI-generated assets: usare con disciplina

Dal 2024 Google offre asset generati da LLM partendo dal sito e dal contesto della campagna. L’opzione è on-by-default in molti account. L’impatto sul CTR è misto: in account con copy human poveri, l’AI eleva la baseline; in account con copy curato e brand voice forte, l’AI omogeneizza e abbassa il CTR su segmenti di intent specifici. Pratica raccomandata: verificare ogni asset AI in coda di approvazione, mantenere attivi solo quelli coerenti col brand voice, eliminare gli altri.

Pipeline di misurazione: oltre i report UI

I report nativi Google Ads UI hanno tre limiti operativi che rendono difficile fare audit sistematici di CTR:

  • Campionamento: i report con segmentazione spinta (es. ad group × match type × slot × device) ricorrono al campionamento sopra certe soglie.
  • Retention 30 giorni per molti dataset granulari (es. search terms con segmentazione avanzata).
  • Asset reporting bias: >50% degli asset finisce in stato Learning o Unrated in account con volume medio, rendendo difficile decidere cosa pausare.

Lo stack che uso negli audit è il seguente:

  1. Google Ads API v18 via google-ads-python per pull on-demand e job di backup giornaliero.
  2. Google Ads Data Transfer per BigQuery: replica completa dei dataset Google Ads in BigQuery, refresh giornaliero, retention illimitata.
  3. Looker Studio (o Looker, Power BI) per dashboard interrogabili su BigQuery con cache attiva.

Per chi non ha mai impostato una pipeline simile, il pattern di autenticazione e pull è analogo a quello che ho descritto per Google Search Console: vedi come usare le API di Google Search Console con Python. Lo snippet seguente è un esempio end-to-end di pull e dump in BigQuery: estrae il CTR diagnostic dataset per gli ultimi 30 giorni e lo carica come tabella partizionata.

# Pipeline: pull Google Ads API -> BigQuery (tabella partizionata per data)

import pandas as pd
from google.ads.googleads.client import GoogleAdsClient
from google.cloud import bigquery
from datetime import date

CUSTOMER_ID = "1234567890"
BQ_PROJECT = "my-project"
BQ_DATASET = "google_ads_audit"
BQ_TABLE = "ctr_diagnosis"

client = GoogleAdsClient.load_from_storage("google-ads.yaml")
ga_service = client.get_service("GoogleAdsService")

query = """
    SELECT
        segments.date,
        campaign.name,
        ad_group.name,
        ad_group_criterion.keyword.text,
        ad_group_criterion.keyword.match_type,
        segments.slot,
        segments.device,
        metrics.impressions,
        metrics.clicks,
        metrics.ctr,
        metrics.average_cpc,
        metrics.conversions,
        metrics.conversions_value
    FROM keyword_view
    WHERE
        segments.date DURING LAST_30_DAYS
        AND campaign.advertising_channel_type = 'SEARCH'
"""

rows = []
for batch in ga_service.search_stream(customer_id=CUSTOMER_ID, query=query):
    for r in batch.results:
        rows.append({
            "date": r.segments.date,
            "campaign": r.campaign.name,
            "ad_group": r.ad_group.name,
            "keyword": r.ad_group_criterion.keyword.text,
            "match_type": r.ad_group_criterion.keyword.match_type.name,
            "slot": r.segments.slot.name,
            "device": r.segments.device.name,
            "impressions": r.metrics.impressions,
            "clicks": r.metrics.clicks,
            "ctr": r.metrics.ctr,
            "avg_cpc": r.metrics.average_cpc / 1_000_000,  # micros -> EUR
            "conversions": r.metrics.conversions,
            "conv_value": r.metrics.conversions_value,
        })

df = pd.DataFrame(rows)

bq = bigquery.Client(project=BQ_PROJECT)
table_ref = f"{BQ_PROJECT}.{BQ_DATASET}.{BQ_TABLE}"

job_config = bigquery.LoadJobConfig(
    write_disposition="WRITE_TRUNCATE",
    time_partitioning=bigquery.TimePartitioning(field="date"),
)
bq.load_table_from_dataframe(df, table_ref, job_config=job_config).result()
print(f"Caricate {len(df)} righe in {table_ref}")

Una volta in BigQuery, la query di diagnosi tipica calcola CTR per ad group separando Top vs Other, brand vs non-brand, e segnala gli ad group che meritano investigazione:

-- BigQuery: CTR diagnosis con segmenti Top/Other e brand split

DECLARE BRAND_REGEX STRING DEFAULT r'(?i)\b(mybrand|mybr)\b';

WITH base AS (
  SELECT
    campaign,
    ad_group,
    CASE WHEN REGEXP_CONTAINS(keyword, BRAND_REGEX) THEN 'brand' ELSE 'non_brand' END AS bucket,
    slot,
    SUM(impressions) AS impr,
    SUM(clicks) AS clk,
    SUM(conversions) AS conv,
    SUM(conv_value) AS rev
  FROM `my-project.google_ads_audit.ctr_diagnosis`
  WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) AND CURRENT_DATE()
  GROUP BY 1,2,3,4
)
SELECT
  campaign,
  ad_group,
  bucket,
  slot,
  impr,
  clk,
  SAFE_DIVIDE(clk, impr) AS ctr,
  SAFE_DIVIDE(conv, clk) AS cvr,
  SAFE_DIVIDE(rev, conv) AS aov
FROM base
WHERE impr >= 500
ORDER BY ctr ASC;

Questa vista è la base della dashboard Looker Studio che propongo in audit, organizzata in 4 sezioni:

  • Auction Context: IS, Top IS, Abs Top IS per campagna, con trend a 90 giorni.
  • Ad Strength evolution: distribuzione Excellent/Good/Average/Poor degli RSA attivi nel tempo, per spotting di degradazione.
  • Asset combinations: heatmap delle combinazioni che dominano lo spend e relativi CTR/CVR.
  • Search Term coverage: gap tra search term effettivi (Search) o category (PMax) e ad copy / search theme.

[PLACEHOLDER IMMAGINE — Screenshot annotato della dashboard Looker Studio con le 4 sezioni etichettate. Da costruire una volta caricati i dati in BQ.]

Sopra questa dashboard configuro un alert: drop CTR > -20% WoW su top 10 keyword per spend innesca una notifica e un ticket di investigazione. Quasi sempre dietro a un drop di quella entità c’è un cambio di asset, un competitor entrato in asta, o un’anomalia di tracking.

Anti-pattern: aumentare CTR distruggendo ROAS

Ottimizzare il CTR senza guardare CVR e ROAS è la trappola più comune negli audit che vedo. Una breve lista degli anti-pattern ricorrenti e perché sono dannosi:

  • Copy clickbait: headline ad alta carica emotiva (“Incredibile!”, “Non crederai”) generano click di intent debole, CVR crolla. Smart Bidding fatica a stabilizzare il modello e riduce le impression nel medio termine.
  • Broad match senza Smart Bidding o senza conversion data: il broad si comporta come “amplificatore” dell’intent: con segnali deboli amplifica rumore, con segnali forti amplifica intent qualificato. Senza Smart Bidding il broad è un generatore di CTR su query irrilevanti.
  • Rotation legacy “ruota in modo uniforme”: l’opzione è ancora presente ma deprecata in pratica dal 2017. Forza Google a ignorare i segnali di performance. Il CTR sale temporaneamente sulle combinazioni più aggressive, poi il modello di Quality Score si degrada.
  • Display Network in campagna Search: la spunta “Includi Search Partners” e “Includi Display Network” è on-by-default in alcune flow di creazione. Le impression Display gonfiano il volume e abbassano il CTR aggregato. Quasi sempre vanno disattivate in campagne Search pure.
  • PMax senza brand exclusion: gonfia CTR/ROAS dichiarati cannibalizzando il brand search. Fix obbligatorio (vedi sezione PMax).
  • Over-pinning: pinnare la stessa headline a posizione 1 senza alternative riduce le combinazioni testabili da centinaia a una manciata. Ad Strength scende a Poor.

Trick del 2012 che non funzionano più nel 2026

Questo articolo nasceva nel 2012 con consigli legati al formato Expanded Text Ads dell’epoca. La maggior parte dei trick sono diventati impossibili o controproducenti con il modello RSA + Smart Bidding:

  • “Terminare description 1 con la punteggiatura per agganciarla al titolo”: tecnica valida sugli ETA in premium position. Con RSA, Google compone le combinazioni in tempo reale e questo controllo non esiste più.
  • “Rimuovere prezzo e inserire sconto”: Smart Bidding gestisce la composizione del messaggio con segnali di intent. Forzare manualmente sconto vs prezzo distorce il modello. Lasciare entrambe le varianti tra gli asset e far decidere a Google.
  • “Titoli stagionali per sembrare attuali”: Performance Max e RSA con AI-generated assets gestiscono già la stagionalità. Manualmente serve solo per eventi specifici (Black Friday, sales locali), via Promotion asset con scadenza.
  • “Rotazione costante degli annunci per testarli uniformemente”: deprecata. Smart Bidding e Ad Strength sostituiscono questa logica.
  • “CTR sotto il 3% è basso”: benchmark del 2012, non più valido. I benchmark Search 2024–2025 variano per settore da 4% (B2B industrial) a 12% (B2C retail brand). Va confrontato con dati di settore aggiornati, non con soglie fisse.

Conclusione

Tre takeaway da portare in qualsiasi audit di CTR Google Ads nel 2026:

  1. Il CTR è una metrica dipendente, non isolata. Va sempre incrociato con auction context (Top vs Other), brand split, CVR e ROAS. Decisioni prese sul CTR aggregato sono quasi sempre sbagliate.
  2. Asset coverage > singole headline geniali. Un RSA con 15 headline diversificate su 5 categorie e 8 sitelink/10 callout/5 image/business logo vince contro un RSA con 3 headline perfette. Ad Strength è una proxy imperfetta ma utile.
  3. Il vero edge è il reporting. Chi fa audit basandosi solo sulla UI di Google Ads sta lavorando con dati campionati e categorie sintetiche. La pipeline API + BigQuery + Looker Studio è il delta competitivo nel 2026, soprattutto per account con Performance Max e dataset granulari.

Se vuoi un audit della tua struttura di campagne Google Ads o una review delle pipeline di reporting, scopri il servizio di consulenza Google Ads. Per un quadro completo delle altre componenti del setup PPC vedi anche come creare un account Google Ads, come scegliere le parole chiave, quanto costa investire in Google Ads e l’analisi del costo per acquisizione (CPA) come KPI complementare.

Articoli correlati

22 min lettura

Il Quality Score di Google Ads è uno strumento diagnostico basato su dati storici a 90 giorni per valutare la pertinenza delle keyword. Analisi tecnica di CTR atteso, rilevanza e landing page experience per abbattere i CPC e ottimizzare l'ad quality score dell'account.
42 mi piace

Autore

Commenti |2

Lascia un commento Lascia un commento
  1. Martin 1 commento

    Ciao Giovanni, avevo poca fiducia di poter migliorare i risultati leggendo guide gratuite online, ma mi sbagliavo… Ho seguito i tuoi consigli e la campagna è migliorata. Non parlo di miracoli ma comunque facciamo più traffico ed il costo per click si è abbassato.

    Hai altre guide da consigliarmi?

    1. Giovanni Sacheli 774 risposte

      Ciao Martin come vedi a volte anche le cose gratuite sono valide :) Ti consiglio il miglior libro che abbia letto su AdWords, lo trovi su Amazon – Advanced Google AdWords di Brad Geddes

      Fammi sapere se ti soddisfa :)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

20 min lettura

Pipeline ingegnerizzata in Python per costruire una lista di keyword Google Ads moderna: seed da Search Console, espansione con Ads API e DataForSEO, scoring multi-fattore, clustering semantico via UMAP e HDBSCAN, mining negative da n-gram analysis ed export CSV per Ads Editor. Otto snippet eseguibili, scelte di filtraggio e troubleshooting da produzione.
1 mi piace
24 min lettura

L'advertising hijacking sfrutta redirect chain e cloaking server-side per dirottare il traffico navigazionale tramite frodi sui programmi affiliate. Analisi tecnica delle vulnerabilità nel brand bidding e pipeline operativa in Playwright per il brand SERP monitoring avanzato.
0 mi piace
88 min lettura

Analisi tecnica delle innovazioni Google Ads 2023-2025 per professionisti. Focus sull'impatto dell'IA generativa, l'evoluzione del bidding automatizzato e l'integrazione di Consent Mode v2 per ottimizzare le conversion action e le performance delle campagne avanzate.
2 mi piace
5 min lettura

Il dominio @xwf.google.com identifica le email legittime dell'Extended Workforce di Google Ads. Verifica l'autenticità dei messaggi e analizza criticamente le ottimizzazioni proposte da questi collaboratori esterni, spesso incentivati all'aumento della spesa piuttosto che al ROI.
2 mi piace

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’esperienza di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1205 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Richiedi un preventivo ora e scopri la differenza tra noi e gli altri.
Richiedi un preventivo

Vuoi ricevere un avviso al mese con le nuove guide pubblicate?

Iscriviti alla newsletter!