DealerMAX — Dealer Identity Layer per concessionari italiani: AIO e Presenza Citabile su ChatGPT, Claude, Gemini, Perplexity

AInvisibile · Osservatorio dealer italiani

Metodologia dell'osservatorio

Tutti i check usati per calcolare i punteggi, il loro peso e la fonte dello standard. Chiunque può riprodurre i calcoli con gli stessi dati pubblici.

← AInvisibile

Versione v2.2.0 · Aggiornata il 14 maggio 2026

La formula

Formula del voto

Il voto Totale /10 è la media aritmetica di tre assi basati su standard riconosciuti:

Totale = ( Tecnico + SEO + Machine Readability ) / 3

L'indicatore AI-Native 2026 viene calcolato separatamente e non partecipa al Totale. Misura l'adozione di proposte non ancora standardizzate e serve solo come lettura complementare.

Trasparenza totale

Elenco completo dei check

Ogni riga indica: identificativo tecnico del check, asse a cui appartiene, peso nella media di asse e fonte dello standard.

Asse Tecnico (infrastruttura)

CheckPesoFonte / standard
TTFB homepage1.5web.dev Core Web Vitals
HTTP/2 o HTTP/31.0RFC 7540 / RFC 9114
Compressione Brotli/gzip0.8RFC 7932 / RFC 1952
CDN attivo0.8pattern headers (cf-ray, x-served-by, ecc.)
Cache-Control su homepage0.6RFC 9111
Security headers (HSTS, X-Frame, CSP, ecc.)1.0OWASP Secure Headers Project
Redirect chain (hop count)0.5Google Search Central
SSR: contenuto nel DOM statico1.5Google Developers — JavaScript SEO
Script render-blocking (head)1.0web.dev performance guidance
Nessun leak versione server0.4OWASP ASVS 4.0 — 14.3

Asse SEO (crawlability standard Google)

CheckPesoFonte / standard
Title tag1.0Google Search Central — Title links
Meta description0.8Google Search Central — Snippets
H1 presente (unico)1.0W3C HTML Living Standard §4.3
Canonical tag (HTTPS valido)1.0RFC 6596 / Google canonicalization
Meta robots avanzato (max-snippet, ecc.)0.5Google Search Central — robots meta
OpenGraph + Twitter Card0.7ogp.me / Twitter Cards spec
Sitemap con URL veicoli + lastmod (regex path canonici + fallback sampling JSON-LD)0.8Sitemaps.org XML protocol / Google Search Central — sitemap. Per i dealer che usano slug non canonici (es. /showroom/, /le-mie-auto/) il check fa sampling di 5 URL deep dal sitemap e verifica @type: Vehicle/Car nel JSON-LD invece di provare a indovinare il path.
404 genuini (no soft-404)0.5Google Search Central — Soft 404 errors

Asse Machine Readability (dati strutturati automotive)

I check di questo asse sono strutturati a livelli (tier) per riflettere la priorità reale di Google Vehicle Listings e degli AI agent automotive. Un sito con solo tipi generici (WebSite, WebPage, BreadcrumbList) senza Vehicle/Offer ottiene 0 — non è un errore del check, è la realtà: quel sito è invisibile a Google Vehicle Listings e alle query AI sul catalogo.

CheckPesoMetodo di valutazioneFonte
Dati strutturati automotive (JSON-LD) — 4 tier2.0 Tier 1 (0.35): Vehicle o Car presente
Tier 2 (0.30): Offer + availability + priceCurrency
Tier 3 (0.20): AutoDealer + Local SEO (Geo/Hours/Address)
Tier 4 (0.15): Contenuto editoriale (FAQPage, DefinedTermSet, Article…)
schema.org (W3C Community Group) · Google Vehicle Listings
Local SEO schema (GeoCoordinates + OpeningHours + PostalAddress + ContactPoint)1.0Score = tipi presenti / 4. Necessari per Local Pack, Maps, Knowledge Panel.schema.org LocalBusiness · Google Business Profile guidelines
Campi veicolo in JSON-LD (km, fuel, anno, colore, cambio…)0.8Skip se nessun Vehicle/Car in pagina. Score = campi trovati / 8 target. Campi: fuelType, mileageFromOdometer, vehicleModelDate, color, bodyType, vehicleTransmission, driveWheelConfiguration, numberOfDoors, engineDisplacement, enginePower, itemCondition, description.Google Vehicle Listings required + recommended fields
X-Robots-Tag HTTP header avanzato0.4Verifica max-snippet / max-image-preview nell'header HTTP.Google Search Central — X-Robots-Tag

Indicatore AI-Native 2026 sperimentale — non nel Totale

Sperimentale

Nessuno di questi segnali è ancora uno standard ufficiale. Alcune sono proposte (llmstxt.org, spawning.ai), altre sono best practice vendor-specifiche (GPTBot di OpenAI, ClaudeBot di Anthropic), altre ancora sono utilizzi non consolidati di RFC esistenti. La loro assenza non penalizza il voto Totale.

CheckPeso (solo nell'indicatore)Fonte / stato
/llms.txt presente e conforme1.0llmstxt.org — proposta (NON W3C, NON IETF, NON ratificata)
/llms-full.txt corpus citabile0.7estensione llmstxt.org — sperimentale
/ai.txt policy0.5spawning.ai — proposta non standard
/.well-known/ai-plugin.json0.2OpenAI ChatGPT Plugins — deprecato 2024-03-19 (sostituito da Custom GPT Actions). Mantenuto come signal informativo con peso ridotto al minimo.
/ai-sitemap.xml0.4custom — nessun registro ufficiale
JSON-LD Dataset → corpus citabile0.3schema.org Dataset (standard) + uso custom
HTTP Link: rel="llms"0.2proposta — nessun registro IANA
Content-Digest sha-256 (RFC 9530)0.2RFC 9530 (standard) — uso AI sperimentale
robots.txt: UA AI esplicitamente allowlisted1.5RFC 9309 (REP) + best practice per-vendor (GPTBot=OpenAI, ClaudeBot=Anthropic, Google-Extended=Google, ecc.). Parsing strict: un UA con Disallow: /admin/ NON è considerato bloccato; solo Disallow: / totale esclude l'UA dall'allowlist.
SpeakableSpecification0.4schema.org — feature Google Assistant de-emphasized: peso ridotto per riflettere lo stato reale dello standard.
Pesi rebalance v2.2.0 — 14 maggio 2026

Prima del rebalance i pesi erano fortemente sbilanciati a favore dei segnali sperimentali (llms.txt = 2.0, robots_ai_ua = 1.5, ai-plugin = 1.2 quando presente). Il framework di fatto premiava chi implementava esattamente i segnali AI-native che DealerMAX serve di default — bias strutturale non difendibile. Nel rebalance v2.2.0 i pesi sono proporzionati alla forza dello standard di riferimento: standard ratificati (schema.org, RFC) mantengono peso pieno, proposte non ratificate (llmstxt.org) ridotte, feature deprecate (ai-plugin.json) ridotte al minimo informativo. Effetto: un sito che implementa tutti i segnali sperimentali raggiunge ancora 10/10 sull'indicatore, ma con un punteggio che è la somma di standard di forza proporzionata, non un favor strutturale.

Confini dichiarati

Cosa non misuriamo

  • Autorità del dominio o backlink — richiede tool esterni a pagamento.
  • Posizionamento effettivo su Google o AI — varia per query, utente, momento.
  • Qualità editoriale del contenuto — è soggettiva.
  • Performance lato client (Lighthouse) — richiede browser reale, non attendibile da HTTP check.
  • Traffico e conversioni — dati privati del dealer.
Onestà metodologica

Limiti dichiarati

  • L'analisi osserva la homepage e pochi file di discovery (robots.txt, /llms.txt, ecc.). Una pagina veicolo può avere dati diversi.
  • Il rilevamento della piattaforma (sitebuilder) si basa su fingerprint HTML e può avere falsi positivi/negativi su siti molto personalizzati.
  • I punteggi sono ricalcolati a ogni scan. Se aggiorniamo i pesi in futuro, pubblichiamo qui il changelog con data e motivazione.
Storico versioni

Changelog

v2.2.0 — 14 maggio 2026

Audit interno di correttezza/difendibilità del framework eseguito su 4 dealer di piattaforme diverse (Matarese — DealerMAX, carecar.it — GestionaleAuto, achillimilano.it — Carmove, newcarshop.it — Labycar) e su brokermotors.it (non-DealerMAX). Trovati e fixati 15+ bug oggettivi nel framework. Aggiunte 3 trasparenze nuove e una migration view per nascondere dal listing pubblico gli scan con framework obsoleto.

Bug fix oggettivi nei check:

  • tech.server_leak: regex precedente flaggava x-powered-by con qualsiasi valore — anche un brand-name pulito senza versione (es. DealerMax). Refactored a regex stretta su versione dotted (1.2, 8.1, 2.4.41) + stack runtime names (PHP, Apache, nginx, IIS, Express, ASP.NET, Tomcat, Jetty, Node.js). Anni single-integer in brand strings (DealerMax 2026 Platform) NON sono flaggati. Spec: OWASP ASVS V14.4.2 — runtime/version disclosure.
  • tech.http_version: HTTP/2 era penalizzato (0.9) rispetto a HTTP/3 (1.0), ma httpx (client di audit) negozia max HTTP/2 anche su server HTTP/3-capable via Cloudflare. Ora HTTP/2 e HTTP/3 entrambi 1.0 — HTTP/2 è production standard (RFC 7540), HTTP/3 emergente.
  • tech.blocking_scripts: bug regex con \b dopo quote impediva il match di type="module". Gli ES modules sono non-blocking per spec HTML5 (deferred di default) ma il check li flaggava come blocking. Fix: regex senza word-boundary tail.
  • tech.redirects: prima 1 hop = 0.9, ora 1.0. Google Search Central raccomanda esplicitamente il pattern apex→www o HTTP→HTTPS con 301: punire la best practice non era difendibile.
  • seo.canonical: il check verificava solo HTTPS, NON l'host-match con la URL servita. Un canonical che punta a un altro dominio passava silenziosamente. Ora confronto stretto: canonical host ≠ served host → fail.
  • seo.sitemap_vehicles: regex hardcoded di path canonici (/usato/, /vendita/, ecc.) falliva su slug fantasia (/showroom/, /vetrina-veicoli/, /le-mie-auto/). Strategia rivista: regex come fast-path zero-costo, fallback sampling JSON-LD di 5 URL deep dal sitemap che verifica @type: Vehicle/Car nel contenuto. Non si tenta più di indovinare lo slug: si verifica il fatto.
  • machine.jsonld: il Tier 2 (Offer + availability + priceCurrency) veniva verificato facendo '"availability"' in html sull'HTML grezzo — falsi positivi su qualsiasi occorrenza nel body, copy, attributi data, ecc. Refactored: l'HTML è parsato come JSON-LD e i sub-flag vengono verificati sui nodi Offer reali (ricerca ricorsiva attraverso @graph annidato).
  • ainative.robots_ai_ua: parsing del robots.txt aveva 2 difetti: (a) falsa positivà — un UA con Disallow: /admin/ veniva contato come allowlisted; (b) replace fragile su "disallow: /\n" falliva su Windows line-ending \r\n. Refactored: parsing strict riga-per-riga. Solo Disallow: / totale esclude un UA dall'allowlist.
  • ainative.llms_txt: bug nello scoring del ramo YAML frontmatter — la formula contava has_h2 due volte (has_h2 + (has_h2 and has_optional)), gonfiando lo score per i file YAML rispetto al markdown puro. Fix: has_h2 + has_optional indipendenti.
  • ainative.link_rel_llms: il check ritornava axis="ai" mentre il loop di aggregazione iterava solo su ("tech", "seo", "machine", "ainative"). Risultato: il check veniva eseguito, esposto nelle evidenze, ma NON contava in nessun asse. Fix: axis="ainative".
  • Pesi variabili a runtime in 4 check (llms_full, ai_txt, plugin_manifest, ai_sitemap): il peso del check cambiava a seconda dello status ritornato (es. 0.3 se missing, 1.2 se present). Conseguenza matematica: i check passati pesavano sproporzionatamente nel denominatore — il bug favoriva chi non aveva i segnali (li penalizzava meno). Pesi resi uniformi e proporzionati alla forza dello standard.
  • HTTP 4xx/5xx pre-check assente: un sito che rispondeva 403 (geoblock dell'IP del nostro audit) o 503 (manutenzione) veniva analizzato come se fosse contenuto pubblico — tutti i check segnavano "missing" attribuendo la colpa al dealer invece che al fetch fallito. Ora: early-return con error http_error esplicito.
  • DNS fallback base recompute: quando un dominio aveva apex DNS non risolvente (es. opportunitycar.it, solo www. risolveva), l'audit faceva fallback su www. per la homepage ma NON aggiornava la URL base usata per i sub-endpoint (/sitemap.xml, /llms.txt, ecc.). Tutti i check di asse ainative fallivano per DNS error — falso 1.64/10 invece di 8.89. Fix: ricalcolo base dalla URL effettiva post-fetch.

Trasparenze aggiunte (nuovo):

  • Note difendibili per ogni check: il backend genera ora una nota in italiano per ogni risultato che spiega cosa significa il punteggio in modo specifico (no genericità tipo "OK") e con riferimento implicito alla spec normativa. Esposta nel /verify response come campo note.
  • Spec_ref normativa per ogni check: ogni check ha ora un campo spec_ref popolato dalla mappa SPEC_REFS che cita la fonte ufficiale (RFC, Google Search Central, schema.org, OWASP ASVS, llmstxt.org). Permette a chiunque di riprodurre il giudizio contro una fonte esterna.
  • UI "Dettagli per check": nuova sezione collassabile nel risultato AInvisible che mostra una tabella per asse con icona status, label, score×peso, nota difendibile, fonte normativa. Trasforma il punteggio da "scatola nera" a "auditable by anyone".
  • Disclaimer onesti sul campione: il listing pubblico dichiara ora che i siti analizzati sono "audit eseguiti tramite questo strumento" (campione self-selected da chi clicca "Analizza"), NON un campione statisticamente rappresentativo del mercato dealer italiano. Il rank percentile usa toFixed(2) per evitare il falso "top 0.0%" quando si sta in realtà nel top 0.02%.
  • Etichetta "SPERIMENTALE" più visibile sull'indicatore AI-Native con link diretto a llmstxt.org e warn box che ribadisce: "Nessuno di questi è uno standard W3C/IETF ratificato. La loro assenza non penalizza il voto complessivo."

Cache invalidation: query /verify ora richiede schema v2 (evidences->'machine.jsonld' ? 'note') per il cache-hit. Record pre-2026-05-14 vengono automaticamente ri-scansionati al prossimo verify.

Migration view audit_scans_latest: la VIEW che alimenta il listing pubblico /sites filtra solo scan con schema v2. I ~5000 record pre-fix restano nella tabella audit_scans come storico ma sono NASCOSTI dal listing pubblico finché lo script di rescan batch non li ripopola con il framework corrente. Side effect: subito dopo la migration il listing mostra pochi risultati e cresce gradualmente nelle 3-4 ore successive al ritmo del worker di rescan (30 audit/min).

Pesi indicatore AI-Native — rebalance: prima i pesi premiavano sproporzionatamente i segnali sperimentali (llms.txt = 2.0, robots_ai_ua = 1.5, ai-plugin = 1.2). DealerMAX serve di default esattamente quei segnali — il framework era strutturalmente biased a proprio favore. Nel rebalance i pesi sono proporzionati alla forza dello standard di riferimento (schema.org/RFC = peso pieno, llmstxt.org/spawning = ridotto, ChatGPT Plugins deprecato = minimo informativo).

Vehicle ItemList in JSON-LD home dealer (apimax): la home graph dealer DealerMAX ora include un nodo ItemList con i top 5 veicoli vetrina come @type: Vehicle con 10 campi schema.org (fuelType, mileageFromOdometer, vehicleModelDate, color, bodyType, vehicleTransmission, driveWheelConfiguration, enginePower, itemCondition, description) + Offer (price, priceCurrency=EUR, availability). Soddisfa il Tier 1 di machine.jsonld (Vehicle/Car presente) e i Google Vehicle Listings required fields.

v2.1.0 — 1 maggio 2026

Asse Machine Readability riscritto con sistema a 4 tier automotive. Motivazione: il precedente conteggio di tipi schema.org generici (WebSite, WebPage, BreadcrumbList) assegnava score elevati a siti privi di Vehicle/Offer, distorcendo la classifica. Il nuovo check valuta esclusivamente la rilevanza automotive: Vehicle/Car (tier 1), Offer transazionale con campi minimi (tier 2), Local SEO (tier 3), contenuto editoriale tipizzato (tier 4). Aggiunti: check Local SEO schema separato (GeoCoordinates+OpeningHours +PostalAddress+ContactPoint), check richezza campi veicolo in JSON-LD, check sitemap con URL veicoli+lastmod, check 404 genuini vs soft-404. Corretto check /llms.txt per accettare formato YAML frontmatter.

v2.0.0 — 16 aprile 2026

Prima versione pubblica. Introdotto lo split in 4 assi (Tecnico, SEO, Machine Readability, AI-Native) con il sperimentale separato dal voto Totale.

Osservatorio

Contatti

Osservatorio curato da DealerMAX (Azure Srl, Buccinasco MI). Per richieste di esclusione, chiarimenti metodologici o segnalazione errori: privacy@dealermax.app.

Disclosure: DealerMAX è un vendor di software per dealer auto ed è anche editor di questo osservatorio. Per evitare conflitti di interesse, nessun check è tarato per premiare un vendor specifico e la formula del voto deriva esclusivamente da standard di terze parti citati nelle tabelle sopra.