Description
Analizzatore di densità keyword da testo o HTML — estrae testo pulito (strip script/style/nav/footer), tokenizza Unicode-aware (italiano completo incluso accenti perfetti, supporta EN/DE/FR/ES/PT/NL/EL/scandinave), rimuove stopwords built-in IT+EN (300+ termini di rumore per ognuna) + custom blocklist user-supplied. Calcola frequenza per unigrammi, bigrammi (2 parole), trigrammi (3 parole). Bonus: campo `keywordTarget` per misurare DIRETTAMENTE densità di 1+ frasi specifiche da monitorare ("piano marketing 2026" → 8 occorrenze / 1.2% densita\`). Differenza con i sibling: action_keyword_density = frequency analysis (text → top-N keywords + custom target check). Per scoring SEO complessivo usa action_seo_audit (incorpora density nei criteri). Per estrarre solo meta tag senza analisi testo usa action_meta_extract. Per estrazione AI semantic (invece di frequency stat) usa agent_extractor. Tokenization Unicode-aware: split su `\p{L}\p{N}` boundary RFC, lowercase NFC normalized (NFD accent stripping configurabile per match approssimato caffe\` vs caffe vs cafe). Stemming italiano opzionale (snowball algorithm) per merge "marketing/marketings/marketingo" in single root. Lunghezza minima token 3 char (anti rumore "in/di/le"). Output: `{ unigrams: [{ token, count, density: % }], bigrams: [...], trigrams: [...], totalWords, uniqueWords, keywordTargets: [{ target, count, density }], topN: 20 }`. Density formula: count / totalWords * 100 (range 0-100%). Target SEO sano: keyword principale 1-3% (oltre = stuffing penalty). Use case Cappella-Sistina-grade: (1) **audit on-page SEO post-publish** — verifico che la mia landing "piano marketing 2026" abbia density 1-3% sul target keyword, alert se under-optimized; (2) **content-gap analysis vs competitor** — scrap 5 SERP top + keyword_density su ognuno → media keyword usato + delta vs mia pagina = lista keyword da aggiungere; (3) **AI suggestion semantic expansion** — top-20 keyword density usato come input a LLM per suggerire bigrami correlati che mancano (LSI keywords); (4) **analytics editoriale** mensile — tutti articoli blog → trend keyword nel tempo (quale topic dominante questo trimestre?). Safety budget: max text input 10 MB, max token cap 1M (oltre = truncate), regex tokenizer timeout 200ms, audit log con totalWords + density top-3 per cost monitoring.
