Verifichi la copertura del testo alternativo delle immagini
La copertura del testo alternativo misura quante immagini di un elenco presentano un attributo alt presente e davvero descrittivo.
Esegui gratis nel browser
Lo strumento esamina ogni record senza scaricare l’immagine o la pagina, calcola la percentuale valida e restituisce ogni anomalia con posizione, origine, valore originale quando disponibile e motivo. È adatto a controlli SEO e di accessibilità ripetibili durante pubblicazioni, scansioni, migrazioni e rilasci.
Che cosa indica la percentuale di copertura
Contare soltanto gli attributi alt esistenti può far apparire una raccolta migliore di quanto sia. Un attributo composto da spazi, un’etichetta come «immagine» o un nome di file della fotocamera non comunica un soggetto utile. Lo strumento considera quindi coperta un’immagine solo quando alt non è vuoto e non coincide con un elenco prudente di segnaposto generici. La percentuale divide le immagini valide per il totale e arrotonda a due decimali. I valori covered e total rendono trasparente il calcolo. L’array offenders conserva la posizione a partire da zero e il valore src fornito, così Lei può ritrovare il record in un’esportazione, database o modello. È un indicatore di copertura, non un giudizio editoriale: una descrizione precisa ma errata può superare il controllo, perché non vengono esaminati i pixel né il contesto della pagina.
Come vengono classificati i valori mancanti, vuoti e generici
Ogni anomalia riceve uno di tre motivi. Missing indica che il record non contiene la proprietà alt, spesso perché mancava l’attributo HTML. Empty significa che la proprietà esiste, ma non rimane alcun carattere dopo la rimozione degli spazi esterni. La distinzione conta: un alt volutamente vuoto può essere corretto per un’immagine decorativa, pur restando escluso dalla metrica. Generic identifica una regola volutamente ristretta, per esempio «foto», «miniatura», «immagine 2» o IMG_2048.jpg. Il confronto ignora maiuscole, spazi ripetuti, trattini, underscore e la punteggiatura finale pertinente. Lo strumento non rifiuta un testo solo perché breve e non tenta valutazioni semantiche approssimative. Questo criterio conservativo mantiene i risultati deterministici, verificabili e adatti a soglie automatiche senza penalizzare nomi di prodotto o descrizioni concise di icone.
Come usare le anomalie nel flusso SEO
Fornisca record provenienti da un crawler, un’esportazione CMS, un inventario di componenti o un test. Ogni record richiede un identificatore src non vuoto, che può essere un URL, un percorso relativo o una chiave interna. alt è facoltativo per rappresentare fedelmente un attributo assente. Dopo il controllo, organizzi le correzioni per motivo: missing segnala spesso markup o valori predefiniti; generic richiede revisione editoriale; empty necessita di una valutazione umana per distinguere immagini decorative e contenuti trascurati. Ripeta l’analisi dopo le modifiche e confronti covered, total e percentage nel report di build o audit. Poiché l’algoritmo non usa rete, analisi visiva, casualità o ora corrente, lo stesso input produce sempre lo stesso output. Un elenco vuoto viene rifiutato: una percentuale senza osservazioni sarebbe fuorviante e potrebbe nascondere un crawler guasto.
Casi d'uso
Controllare un’esportazione del crawler
Trasformi origini e attributi estratti in un punteggio e in una coda precisa di correzioni.
Gestire il rilascio di un sito
Blocchi la pubblicazione quando la copertura descrittiva scende sotto la soglia richiesta.
Verificare una migrazione CMS
Individui attributi scomparsi, svuotati o sostituiti da segnaposto durante la migrazione.
Domande frequenti
Che cosa conta come copertura?
L’immagine è coperta se alt contiene testo oltre agli spazi e non coincide con le regole conservative per valori generici.
Un attributo alt intenzionalmente vuoto conta?
No. Compare con il motivo empty. Può essere corretto per immagini decorative, ma questa metrica richiede una descrizione non vuota.
Lo strumento esamina le immagini?
No. Valuta soltanto gli identificatori src e gli attributi alt forniti, quindi non può confermare l’accuratezza della descrizione.
Perché un elenco vuoto genera un errore?
Senza osservazioni non esiste una percentuale significativa. Il rifiuto fa emergere anche estrazioni assenti o configurate male.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. La stessa logica deterministica può essere eseguita gratuitamente nel browser.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/seo/alt-text-coverage \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"images":[{"src":"/team/alex.jpg","alt":"Alex presenting the quarterly roadmap"},{"src":"/products/blue-mug.jpg","alt":"image"},{"src":"/icons/search.svg","alt":""},{"src":"/charts/revenue.png","alt":"Monthly recurring revenue rose from January to June"}]}'const res = await fetch("https://api.kit.forhosting.com/seo/alt-text-coverage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"images": [
{
"src": "/team/alex.jpg",
"alt": "Alex presenting the quarterly roadmap"
},
{
"src": "/products/blue-mug.jpg",
"alt": "image"
},
{
"src": "/icons/search.svg",
"alt": ""
},
{
"src": "/charts/revenue.png",
"alt": "Monthly recurring revenue rose from January to June"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/alt-text-coverage",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"images": [
{
"src": "/team/alex.jpg",
"alt": "Alex presenting the quarterly roadmap"
},
{
"src": "/products/blue-mug.jpg",
"alt": "image"
},
{
"src": "/icons/search.svg",
"alt": ""
},
{
"src": "/charts/revenue.png",
"alt": "Monthly recurring revenue rose from January to June"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/alt-text-coverage", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"images":[{"src":"/team/alex.jpg","alt":"Alex presenting the quarterly roadmap"},{"src":"/products/blue-mug.jpg","alt":"image"},{"src":"/icons/search.svg","alt":""},{"src":"/charts/revenue.png","alt":"Monthly recurring revenue rose from January to June"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"images":[{"src":"/team/alex.jpg","alt":"Alex presenting the quarterly roadmap"},{"src":"/products/blue-mug.jpg","alt":"image"},{"src":"/icons/search.svg","alt":""},{"src":"/charts/revenue.png","alt":"Monthly recurring revenue rose from January to June"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/alt-text-coverage", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"images": [
{
"src": "/team/alex.jpg",
"alt": "Alex presenting the quarterly roadmap"
},
{
"src": "/products/blue-mug.jpg",
"alt": "image"
},
{
"src": "/icons/search.svg",
"alt": ""
},
{
"src": "/charts/revenue.png",
"alt": "Monthly recurring revenue rose from January to June"
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.alt_text_coverage",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |