  {"id":3946,"date":"2026-06-30T07:43:17","date_gmt":"2026-06-30T06:43:17","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=3946"},"modified":"2026-06-30T07:43:18","modified_gmt":"2026-06-30T06:43:18","slug":"clustering-keyword","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/clustering-keyword\/","title":{"rendered":"Clustering delle keyword: raggruppare migliaia di query con K-means e clustering gerarchico"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Capita con ogni progetto un po&#8217; serio: si esporta l&#8217;elenco delle keyword da Search Console o da un tool, e ci si ritrova davanti a migliaia di righe. Tremila, diecimila query. Leggerle una per una \u00e8 impensabile, e raggrupparle a mano &#8220;a sentimento&#8221; \u00e8 un lavoro lento, soggettivo e impossibile da rifare.<br>Eppure quel raggruppamento ci serve: vogliamo capire quali grandi famiglie di ricerche esistono nel nostro mercato, per decidere dove creare contenuti, quali pagine costruire, su cosa puntare.<br>La domanda \u00e8: possiamo lasciare che siano i dati a rivelarci i gruppi, invece di imporli noi? Trasformare quella montagna di query in pochi insiemi omogenei \u00e8 il lavoro del <em>clustering delle keyword<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo gi\u00e0 affrontato un problema vicino, classificare l&#8217;<a href=\"https:\/\/www.gironi.it\/blog\/naive-bayes-intento-ricerca\/\">intento di una query con il Naive Bayes<\/a> \u2014 ma l\u00ec avevamo un ingrediente che oggi ci manca: un insieme di esempi <em>gi\u00e0 etichettati<\/em> da cui imparare. Qui le etichette non ce le ha date nessuno. \u00c8 il territorio del <em>clustering<\/em>, uno degli strumenti pi\u00f9 usati del <a href=\"https:\/\/www.gironi.it\/blog\/machine-learning-una-guida-per-i-principianti\/\">machine learning<\/a>, e in questo articolo lo costruiamo in R con i suoi due algoritmi classici: il <em>K-means<\/em> e il clustering gerarchico.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Di cosa parleremo<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"#senza-etichette\">Raggruppare senza etichette: l&#8217;idea del clustering<\/a><\/li><li><a href=\"#k-means\">K-means: i centroidi e il problema di scegliere k<\/a><\/li><li><a href=\"#leggere-cluster\">Leggere i cluster: chi sono questi gruppi?<\/a><\/li><li><a href=\"#gerarchico\">Clustering gerarchico: il dendrogramma<\/a><\/li><li><a href=\"#trappole\">Quale metodo, e le trappole<\/a><\/li><li><a href=\"#prova-tu\">Prova tu<\/a><\/li><li><a href=\"#per-approfondire\">Per approfondire<\/a><\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"senza-etichette\">Raggruppare senza etichette: l&#8217;idea del clustering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La differenza con il Naive Bayes \u00e8 di principio, non di dettaglio. L\u00ec facevamo <em>apprendimento supervisionato<\/em>: avevamo query gi\u00e0 marcate come informazionali, navigazionali o transazionali, e insegnavamo all&#8217;algoritmo a riconoscere le nuove. Qui facciamo <em>apprendimento non supervisionato<\/em>: nessuno ci ha detto quali e quanti gruppi esistano. <strong>Il clustering non verifica un&#8217;etichetta che gi\u00e0 conosciamo: cerca una struttura che non sapevamo ci fosse.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per raggruppare servono due cose. La prima \u00e8 descrivere ogni keyword con dei numeri: nel nostro esempio useremo il volume di ricerca, il costo per clic (<em>cpc<\/em>), la posizione media e il numero di parole.<br>La seconda \u00e8 una nozione di <em>distanza<\/em>: due keyword sono &#8220;vicine&#8221; se i loro numeri si somigliano. La distanza pi\u00f9 comune \u00e8 quella euclidea, la stessa che useremmo su una mappa, solo calcolata in uno spazio a quattro dimensioni (una per ogni metrica).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e8 per\u00f2 una trappola da disinnescare subito. Il volume si misura in decine di migliaia, il cpc in centesimi di euro: lasciate cos\u00ec, le distanze sarebbero dominate dal volume, e il cpc non conterebbe quasi nulla.<br><strong>Prima di calcolare qualsiasi distanza dobbiamo mettere tutte le variabili sulla stessa scala<\/strong>, standardizzandole \u2014 in R con la funzione <code>scale()<\/code>, che a ogni colonna sottrae la media e la divide per la deviazione standard. Solo a quel punto un euro di differenza nel cpc e diecimila ricerche di differenza nel volume &#8220;pesano&#8221; allo stesso modo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"k-means\">K-means: i centroidi e il problema di scegliere k<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;idea del K-means \u00e8 quasi ingenua nella sua semplicit\u00e0. Decidiamo in quanti gruppi (k) vogliamo dividere i dati; l&#8217;algoritmo piazza k punti-rappresentanti, i <em>centroidi<\/em>, e poi ripete due passi finch\u00e9 le cose si stabilizzano: assegna ogni keyword al centroide pi\u00f9 vicino, poi sposta ogni centroide nel centro delle keyword che gli sono state assegnate. Ad ogni giro i gruppi diventano un po&#8217; pi\u00f9 coesi, finch\u00e9 non si muovono pi\u00f9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ci\u00f2 che l&#8217;algoritmo cerca di minimizzare, a parole, \u00e8 la dispersione interna dei gruppi: la somma delle distanze (al quadrato) di ogni punto dal centroide del proprio cluster. In formula:<\/p>\n\n\n\n\\( \\text{WCSS} = \\sum_{k=1}^{K} \\sum_{x \\in C_k} \\lVert x &#8211; \\mu_k \\rVert^2 \\\\ \\)\n\n\n\n<p class=\"wp-block-paragraph\">dove \\( C_k \\) \u00e8 il k-esimo cluster, \\( \\mu_k \\) il suo centroide e la doppia sommatoria scorre tutti i punti di tutti i gruppi. Pi\u00f9 la WCSS (<em>within-cluster sum of squares<\/em>) \u00e8 bassa, pi\u00f9 i gruppi sono compatti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resta il punto dolente: k lo dobbiamo decidere noi, prima di iniziare. Un aiuto viene dal <em>metodo del gomito<\/em>: proviamo diversi valori di k e guardiamo come cala la WCSS. All&#8217;inizio aggiungere un cluster aiuta molto, poi i miglioramenti si fanno marginali; il &#8220;gomito&#8221; della curva \u2014 il punto dove la discesa si appiattisce \u2014 suggerisce un k ragionevole. Costruisco la tabella di keyword e calcolo la WCSS da 1 a 6 gruppi in R:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kw &lt;- data.frame(\n  keyword = c(\"scarpe running\",\"scarpe running uomo\",\"nike pegasus\",\"nike pegasus 40\",\n              \"migliori scarpe trail 2026\",\"come scegliere scarpe running\",\n              \"scarpe running offerta\",\"comprare scarpe trail online\",\n              \"differenza scarpe trail e strada\",\"scarpe running pronazione\",\n              \"asics gel nimbus\",\"saucony endorphin\",\"recensione scarpe trail\",\n              \"scarpe running scontate\",\"negozio scarpe running milano\"),\n  volume   = c(40000,18000,12000,8000,2400,1900,3200,880,1300,2100,9000,4000,1500,2600,720),\n  cpc      = c(0.45,0.55,0.30,0.35,0.40,0.10,0.95,1.10,0.08,0.30,0.28,0.33,0.15,0.90,0.85),\n  posizione= c(3.1,4.2,2.0,5.5,8.1,11.2,6.0,9.4,14.0,7.3,2.5,6.8,12.1,5.9,4.7),\n  n_parole = c(2,3,2,3,5,5,3,4,6,3,3,2,3,3,4)\n)\n\n# standardizzo le quattro metriche (scale diverse -&gt; stesso peso)\nX &lt;- scale(kw[, c(\"volume\",\"cpc\",\"posizione\",\"n_parole\")])\n\n# metodo del gomito: WCSS per k da 1 a 6\nset.seed(1)\nwss &lt;- sapply(1:6, function(k) kmeans(X, centers = k, nstart = 10)$tot.withinss)\nround(wss, 1)\n# [1] 56.0 34.4 20.7 12.4  8.7  6.9<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il calo \u00e8 ripido fino a tre gruppi (56 \u2192 34 \u2192 21) e poi rallenta nettamente (21 \u2192 12 \u2192 9 \u2192 7). Il gomito non \u00e8 mai una linea netta \u2014 \u00e8 una lettura, non un teorema \u2014 ma qui indica con ragionevolezza <strong>k = 3<\/strong>. Lancio allora il K-means con tre centroidi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set.seed(1)\nkm &lt;- kmeans(X, centers = 3, nstart = 25)\nkw$cluster &lt;- km$cluster\ntable(km$cluster)\n# 1 2 3\n# 4 7 4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">n.b. l&#8217;argomento <code>nstart = 25<\/code> fa ripartire l&#8217;algoritmo 25 volte da centroidi iniziali diversi, tenendo la soluzione migliore: il K-means pu\u00f2 infatti incagliarsi in un minimo locale a seconda di dove parte, e ripartire pi\u00f9 volte \u00e8 la difesa standard. Il <code>set.seed(1)<\/code> serve solo a rendere l&#8217;esempio riproducibile (compresa la numerazione dei cluster, che di per s\u00e9 \u00e8 arbitraria).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"leggere-cluster\">Leggere i cluster: chi sono questi gruppi?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avere tre gruppi non serve a niente finch\u00e9 non capiamo <em>cosa<\/em> rappresentano. Il modo pi\u00f9 diretto \u00e8 guardare le metriche medie di ciascun cluster.<br>Le calcolo sulla scala originale (non quella standardizzata, che \u00e8 illeggibile):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aggregate(kw[, c(\"volume\",\"cpc\",\"posizione\",\"n_parole\")],\n          by = list(cluster = kw$cluster), FUN = mean)\n#   cluster volume  cpc posizione n_parole\n# 1       1   1775 0.18     11.35     4.75\n# 2       2  13300 0.37      4.49     2.57\n# 3       3   1850 0.95      6.50     3.50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Adesso i gruppi parlano.<br>Il <strong>cluster 2<\/strong> raccoglie le query a volume altissimo (in media 13.300 ricerche), corte (due-tre parole), ben posizionate e con cpc modesto: sono le <em>teste<\/em> generiche e di marca \u2014 &#8220;scarpe running&#8221;, &#8220;nike pegasus&#8221;, &#8220;asics gel nimbus&#8221;. Il <strong>cluster 1<\/strong> ha volumi bassi, query lunghe (quasi cinque parole), posizioni arretrate e cpc minimo: \u00e8 il long-tail <em>informazionale<\/em> \u2014 &#8220;come scegliere scarpe running&#8221;, &#8220;differenza scarpe trail e strada&#8221;, &#8220;recensione scarpe trail&#8221;. Il <strong>cluster 3<\/strong> si distingue per un cpc altissimo (0,95 \u20ac) e contiene le query a chiaro taglio <em>commerciale<\/em> \u2014 &#8220;scarpe running offerta&#8221;, &#8220;comprare scarpe trail online&#8221;, &#8220;scarpe running scontate&#8221;, &#8220;negozio scarpe running milano&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vale la pena fermarsi un istante su cosa \u00e8 appena successo. <strong>Senza dare all&#8217;algoritmo alcuna etichetta, i tre gruppi che emergono ricalcano da vicino una distinzione per intento \u2014 ricerca informativa, teste generiche e di marca, query commerciali \u2014 vicina a quella che con il Naive Bayes avevamo invece dovuto insegnargli a colpi di esempi.<\/strong><br>L&#8217;allineamento, attenzione, non \u00e8 magia: emerge perch\u00e9 le metriche che abbiamo scelto (cpc, lunghezza, posizione) <em>tracciano indirettamente<\/em> l&#8217;intento, non perch\u00e9 il clustering lo conosca \u2014 di significato delle query, qui, non ne ha vista neppure una parola. La lettura resta comunque immediatamente operativa: il cluster informativo chiede articoli e guide, quello commerciale pagine prodotto e di offerta, quello ad alto volume pagine pilastro robuste.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"gerarchico\">Clustering gerarchico: il dendrogramma<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il K-means ci ha costretti a scegliere k in anticipo. Il clustering <em>gerarchico<\/em> ribalta l&#8217;approccio: non decide nulla a priori, e costruisce invece un albero completo di raggruppamenti. Parte da ogni keyword come gruppo a s\u00e9, poi fonde via via le due pi\u00f9 vicine, poi le due pi\u00f9 vicine fra quelle rimaste, e cos\u00ec via fino a un unico grande gruppo. Il risultato \u00e8 un <em>dendrogramma<\/em>: un albero che mostra a quale &#8220;altezza&#8221; (cio\u00e8 a quale distanza) ogni fusione avviene.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo costruisco in R calcolando prima la matrice delle distanze, poi l&#8217;albero:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>d  &lt;- dist(X)                       # distanze euclidee fra le keyword standardizzate\nhc &lt;- hclust(d, method = \"ward.D2\") # albero gerarchico (criterio di Ward)\nplot(hc, labels = kw$keyword)       # il dendrogramma<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il bello del dendrogramma \u00e8 che la decisione su <em>quanti<\/em> gruppi tenere la prendiamo <em>dopo<\/em> averlo visto, semplicemente &#8220;tagliandolo&#8221; a un&#8217;altezza scelta: un taglio basso lascia molti gruppetti, un taglio alto pochi gruppi grandi. Taglio a tre gruppi e confronto con il K-means:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kw$cluster_hc &lt;- cutree(hc, k = 3)\ntable(kw$cluster_hc)\n# 1 2 3\n# 8 3 4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La partizione non \u00e8 identica a quella del K-means (qui i gruppi sono da 8, 3 e 4 keyword), ed \u00e8 normale: i due metodi ottimizzano criteri diversi e su pochi dati le differenze si notano.<br>Ma la sostanza dei raggruppamenti \u2014 il blocco transazionale ad alto cpc, le teste ad alto volume, la coda informazionale \u2014 resta riconoscibile in entrambi. Quando due metodi diversi convergono sulla stessa storia, possiamo fidarci un po&#8217; di pi\u00f9 di quella storia.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trappole\">Quale metodo, e le trappole<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La scelta fra i due, nella pratica, segue poche regole semplici. Il <strong>K-means<\/strong> \u00e8 veloce ed efficiente anche su decine di migliaia di keyword, ma vuole che gli si dica k e tende a costruire gruppi di forma &#8220;sferica&#8221; e di dimensioni simili. Il <strong>gerarchico<\/strong> non chiede k in anticipo e regala il dendrogramma \u2014 prezioso per <em>vedere<\/em> come i gruppi si annidano l&#8217;uno nell&#8217;altro \u2014 ma diventa pesante quando le keyword sono troppe. La pratica pi\u00f9 comune: esplorare in gerarchico su un campione per farsi un&#8217;idea del numero di gruppi, poi applicare il K-means all&#8217;intero set con il k cos\u00ec individuato.<\/p>\n\n\n\n<p class=\"has-light-gray-background-color has-background wp-block-paragraph\">Un avvertimento, il pi\u00f9 importante di tutti: <strong>il clustering trova sempre dei gruppi, anche quando non ce ne sono.<\/strong> Diamogli del rumore puro e ce lo divider\u00e0 diligentemente in k cluster ordinati. Il numero di gruppi, le metriche scelte per descrivere le keyword, la standardizzazione: sono tutte decisioni <em>nostre<\/em>, e ognuna cambia il risultato. Un raggruppamento non \u00e8 una verit\u00e0 scoperta nei dati, \u00e8 un&#8217;ipotesi di lavoro che ha senso solo se regge alla prova del buon senso di business. Se un cluster non riusciamo a spiegarlo a parole, probabilmente non esiste davvero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e8 poi una questione di dimensioni. Qui abbiamo usato quattro metriche, ma nella realt\u00e0 operativa le variabili descrittive di una keyword possono essere molte di pi\u00f9, e con tante dimensioni le distanze perdono di significato (tutto tende a sembrare ugualmente lontano).<br>\u00c8 esattamente il problema che l&#8217;<a href=\"https:\/\/www.gironi.it\/blog\/una-introduzione-allanalisi-delle-componenti-principali-pca\/\">analisi delle componenti principali<\/a> sa alleggerire, comprimendo molte metriche in poche componenti prima di passare il testimone al clustering.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prova-tu\">Prova tu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il modo migliore per capire il clustering \u00e8 vederlo cambiare risposta al variare delle scelte. Riprendendo il codice qui sopra:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Salta la standardizzazione: lancia il K-means direttamente su <code>kw[, c(\"volume\",\"cpc\",\"posizione\",\"n_parole\")]<\/code> senza <code>scale()<\/code>. I gruppi crollano tutti sul volume? \u00c8 la dimostrazione pratica di perch\u00e9 si standardizza.<\/li><li>Cambia k: prova con quattro o cinque gruppi e rileggi le medie. Il cluster informazionale si spezza in sotto-temi sensati o stai solo tagliando il rumore?<\/li><li>Cambia il criterio di fusione del gerarchico: <code>method = \"complete\"<\/code> o <code>\"average\"<\/code> al posto di <code>\"ward.D2\"<\/code>. Il dendrogramma cambia forma? E i gruppi tagliati a k=3?<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Suggerimento: tieni sempre d&#8217;occhio le medie per cluster con <code>aggregate()<\/code>. \u00c8 l\u00ec, e non nel codice, che si decide se un raggruppamento \u00e8 utile o \u00e8 solo una partizione elegante di niente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo raggruppato le keyword in base a come si <em>comportano<\/em> \u2014 volume, costo, posizione.<br>Ma resta fuori la cosa che per un SEO conta di pi\u00f9: il loro <em>significato<\/em>. Due query possono avere metriche diverse e voler dire la stessa cosa, oppure metriche simili e intenti opposti. Raggruppare per senso, e non solo per numeri, significa trasformare il testo stesso delle query in qualcosa di misurabile: \u00e8 il mestiere del <em>text mining<\/em>, dove le parole diventano vettori e la similarit\u00e0 si calcola sul linguaggio. Ed \u00e8 da l\u00ec che ripartiremo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"per-approfondire\">Per approfondire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Se vuoi approfondire il clustering \u2014 K-means, metodi gerarchici, la scelta del numero di gruppi e le insidie dell&#8217;interpretazione \u2014 <em><a href=\"https:\/\/www.amazon.it\/dp\/1461471370?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\">An Introduction to Statistical Learning<\/a><\/em> di James, Witten, Hastie e Tibshirani dedica all&#8217;apprendimento non supervisionato un capitolo limpido, con i laboratori in R che ricalcano esattamente i passi che abbiamo visto qui. \u00c8 il riferimento che consiglio a chi vuole passare dall&#8217;esempio giocattolo al clustering su dati veri.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Capita con ogni progetto un po&#8217; serio: si esporta l&#8217;elenco delle keyword da Search Console o da un tool, e ci si ritrova davanti a migliaia di righe. Tremila, diecimila query. Leggerle una per una \u00e8 impensabile, e raggrupparle a mano &#8220;a sentimento&#8221; \u00e8 un lavoro lento, soggettivo e impossibile da rifare.Eppure quel raggruppamento ci &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/clustering-keyword\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Clustering delle keyword: raggruppare migliaia di query con K-means e clustering gerarchico&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[],"class_list":["post-3946","post","type-post","status-publish","format-standard","hentry","category-statistica-it"],"lang":"it","translations":{"it":3946,"en":3947},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"Paolo Gironi","author_link":"https:\/\/www.gironi.it\/blog\/author\/autore-articoli\/"},"uagb_comment_info":0,"uagb_excerpt":"Capita con ogni progetto un po&#8217; serio: si esporta l&#8217;elenco delle keyword da Search Console o da un tool, e ci si ritrova davanti a migliaia di righe. Tremila, diecimila query. Leggerle una per una \u00e8 impensabile, e raggrupparle a mano &#8220;a sentimento&#8221; \u00e8 un lavoro lento, soggettivo e impossibile da rifare.Eppure quel raggruppamento ci&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=3946"}],"version-history":[{"count":1,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3946\/revisions"}],"predecessor-version":[{"id":3949,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/3946\/revisions\/3949"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=3946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=3946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=3946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}