{"id":74207,"date":"2023-10-30T13:32:38","date_gmt":"2023-10-30T12:32:38","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=74207&#038;preview=true&#038;preview_id=74207"},"modified":"2023-10-31T09:53:42","modified_gmt":"2023-10-31T08:53:42","slug":"gatsby","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/gatsby\/","title":{"rendered":"Guida completa alla costruzione di siti statici con Gatsby"},"content":{"rendered":"<p>I siti web statici sono tornati alla ribalta negli ultimi anni grazie alla loro velocit\u00e0, sicurezza e semplicit\u00e0. Uno dei principali strumenti per la creazione di siti statici \u00e8 Gatsby, un <a href=\"https:\/\/kinsta.com\/it\/argomenti\/generatore-siti-statici\/\">generatore di siti statici<\/a> (SSG) velocissimo.<\/p>\n<p>Se siete sviluppatori web e volete creare un <a href=\"https:\/\/kinsta.com\/it\/blog\/idee-per-il-nome-del-blog\/\">blog personale<\/a>, un <a href=\"https:\/\/kinsta.com\/it\/blog\/sito-web-portfolio\/\">sito portfolio<\/a> o un sito aziendale, Gatsby pu\u00f2 aiutarvi a raggiungere i vostri obiettivi. Questa guida completa vi accompagna nel processo di creazione di <a href=\"https:\/\/kinsta.com\/it\/blog\/sito-web-statico\/\">siti statici<\/a> con Gatsby. Copre tutto, dalle basi agli argomenti pi\u00f9 avanzati.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/gatsby-demo-site.gif\" alt=\"Un sito demo che mostra cosa si pu\u00f2 costruire dopo aver letto questa guida\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Un sito demo che mostra cosa si pu\u00f2 costruire dopo aver letto questa guida.<\/figcaption><\/figure>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Capire i siti statici<\/h2>\n<p>I siti statici sono pagine web contenenti file <a href=\"https:\/\/kinsta.com\/it\/blog\/html\/\">HTML<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/best-practice-css\/\">CSS<\/a> e <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a> prerenderizzati. A differenza dei siti dinamici, non si affidano all&#8217;elaborazione lato server per ogni richiesta. Al contrario, tutti i contenuti vengono generati in anticipo e serviti direttamente al browser dell&#8217;utente. Questo approccio offre diversi vantaggi:<\/p>\n<ol start=\"1\">\n<li><strong>Velocit\u00e0:<\/strong> i siti statici si caricano velocemente perch\u00e9 non c&#8217;\u00e8 elaborazione lato server.<\/li>\n<li><strong>Sicurezza:<\/strong> senza l&#8217;esecuzione di codice lato server, i siti statici sono meno vulnerabili alle minacce alla sicurezza.<\/li>\n<li><strong>Scalabilit\u00e0<\/strong>: \u00e8 facile memorizzare nella cache e distribuire i siti statici attraverso le reti di distribuzione dei contenuti (CDN).<\/li>\n<li><strong>Semplicit\u00e0:<\/strong> sono pi\u00f9 facili da sviluppare, distribuire e mantenere.<\/li>\n<\/ol>\n<p>Ora che abbiamo approfondito cosa sono i siti statici e quali sono i loro vantaggi, vediamo come funziona Gatsby.<\/p>\n<h2>Cos&#8217;\u00e8 Gatsby?<\/h2>\n<p>Gatsby \u00e8 un framework open-source basato sulla libreria JavaScript <a href=\"https:\/\/kinsta.com\/it\/blog\/react-js\/\">React<\/a> che semplifica il processo di costruzione di siti web statici. Combina la potenza dei <a href=\"https:\/\/kinsta.com\/it\/blog\/libreria-componenti-react\/\">componenti React<\/a> con GraphQL per la gestione dei dati, rendendolo una scelta eccellente per gli sviluppatori di tutti i livelli. Ecco perch\u00e9 Gatsby si distingue:<\/p>\n<ol start=\"1\">\n<li><strong>Velocit\u00e0 straordinaria:<\/strong> Gatsby ottimizza i siti per la velocit\u00e0 utilizzando tecniche come code splitting e lazy loading, per un caricamento quasi istantaneo delle pagine.<\/li>\n<li><strong>Fornitura flessibile dei dati:<\/strong> pu\u00f2 reperire i dati da diversi luoghi, tra cui file Markdown, API e database.<\/li>\n<li><strong>Ricco ecosistema di plugin:<\/strong> l&#8217;<a href=\"https:\/\/www.gatsbyjs.com\/plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">ampio ecosistema di plugin<\/a> di Gatsby permette di estendere le sue funzionalit\u00e0 senza alcuno sforzo.<\/li>\n<li><strong>SEO e prestazioni:<\/strong> Gatsby genera automaticamente un HTML ottimizzato per migliorare la SEO e le prestazioni.<\/li>\n<\/ol>\n<h2>Primi passi con Gatsby<\/h2>\n<p>Per seguire questa guida, \u00e8 necessario avere:<\/p>\n<ul>\n<li>Conoscenza di base di HTML, CSS e JavaScript<\/li>\n<li>Conoscenza di base di React<\/li>\n<li>Node.js e npm (<a href=\"https:\/\/kinsta.com\/it\/blog\/cos-e-npm\/\">Node Package Manager<\/a>) o <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-sviluppo-web\/#39-yarn\">yarn<\/a> installati sul computer<\/li>\n<\/ul>\n<p>Per iniziare a utilizzare Gatsby e creare un progetto, potete utilizzare uno dei tanti esempi presenti nella <a href=\"https:\/\/www.gatsbyjs.com\/starters\/\" target=\"_blank\" rel=\"noopener noreferrer\">Gatsby Starter Library<\/a> o creare un progetto da zero.<\/p>\n<p>Per questa guida, utilizziamo lo <a href=\"https:\/\/www.gatsbyjs.com\/starters\/gatsbyjs\/gatsby-starter-hello-world\/\" target=\"_blank\" rel=\"noopener noreferrer\">starter ufficiale di hello world<\/a> per GatsbyJS perch\u00e9 ci fornisce un progetto semplice senza plugin o file aggiuntivi con cui partire.<\/p>\n<ol start=\"1\">\n<li>Per prima cosa, installiamo la Gatsby CLI sul computer eseguendo il comando qui sotto:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm install -g gatsby-cli<\/code><\/pre>\n<p>Eseguiamo <code>gatsby --version<\/code> per verificare se l&#8217;installazione \u00e8 avvenuta con successo.<\/p>\n<ol start=\"2\">\n<li>Successivamente, navighiamo nella cartella in cui desideriamo creare il progetto ed eseguiamo il comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npx gatsby new &lt;project-name&gt; https:\/\/github.com\/gatsbyjs\/gatsby-starter-hello-world<\/code><\/pre>\n<p>Cambiate pure <code>&lt;project-name&gt;<\/code> con il nome che preferite per il vostro progetto.<\/p>\n<ol start=\"3\">\n<li>Una volta completata l&#8217;operazione, navighiamo nella cartella del progetto e avviamo il server di sviluppo:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt;\ngatsby develop<\/code><\/pre>\n<p>Il server di sviluppo locale verr\u00e0 avviato all&#8217;indirizzo <a href=\"http:\/\/localhost:8000\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8000<\/a>, dove potremo accedere al nostro sito Gatsby.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/gatsby-hello-world.png\" alt=\"Il tema Gatsby hello world\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Il tema Gatsby hello world.<\/figcaption><\/figure>\n<h3>Capire la struttura dei file di Gatsby<\/h3>\n<p>Una volta aperto il progetto in un editor di codice, vedremo la seguente struttura:<\/p>\n<pre><code class=\"language-bash\">\/\n|-- \/public\n|-- \/src\n    |-- \/pages\n        |-- index.js\n|-- \/static\n|-- gatsby-config.js<\/code><\/pre>\n<ul>\n<li><strong>\/public:<\/strong> Questa directory contiene l&#8217;output del processo di creazione di Gatsby. \u00c8 dove risiedono l&#8217;HTML, il CSS, il JavaScript e altre risorse generate.<\/li>\n<li><strong>\/src:<\/strong> \u00e8 il cuore del progetto Gatsby, dove passeremo la maggior parte del tempo. Contiene varie sottodirectory e file:\n<ul>\n<li><strong>\/pages:<\/strong> qui sono archiviate tutte le pagine del progetto. Ogni file JavaScript qui presente corrisponde a un percorso del sito web.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><strong>\/static:<\/strong> questa directory \u00e8 utilizzata per i file statici che vogliamo includere nel sito, come immagini, font o file scaricabili. Questi file vengono serviti cos\u00ec come sono e non vengono elaborati da Gatsby.<\/li>\n<li><strong>gatsby-config.js:<\/strong> in questo file di configurazione vengono definite varie impostazioni per il sito Gatsby. Qui possiamo specificare i plugin, i metadati del sito e altre configurazioni.<\/li>\n<\/ul>\n<h2>Creare pagine e componenti<\/h2>\n<p>In Gatsby, la creazione di pagine web \u00e8 un processo semplice. Qualsiasi file JavaScript creato all&#8217;interno della cartella <strong>\/src\/pages<\/strong> diventa automaticamente una pagina con il suo percorso corrispondente, grazie alla generazione automatica di pagine di Gatsby.<\/p>\n<p>Possiamo creare tutte le pagine di cui abbiamo bisogno per il sito web aggiungendo altri file JavaScript alla cartella <strong>\/src\/pages<\/strong>. Ad esempio, possiamo creare un file <strong>about.js<\/strong> per una pagina &#8220;Informazioni&#8221;.<\/p>\n<p>Sebbene sia possibile creare singoli file JavaScript per ogni pagina direttamente nella cartella <strong>\/src\/pages<\/strong>, \u00e8 anche possibile organizzare ulteriormente le pagine. Possiamo creare delle sottocartelle per raggruppare pagine correlate. Ad esempio, potreste creare una cartella <strong>blog<\/strong> per organizzare tutte le pagine relative al blog.<\/p>\n<p>Per questo progetto, la struttura delle pagine sar\u00e0 la seguente:<\/p>\n<pre><code class=\"language-bash\">|-- \/src\n    |-- \/pages\n        |-- about.js\n        |-- index.js\n        |-- \/blog\n            |-- index.js<\/code><\/pre>\n<h3>Utilizzare JSX per le pagine<\/h3>\n<p>Poich\u00e9 Gatsby \u00e8 costruito su React, le sue pagine e i suoi componenti sono scritti in <a href=\"https:\/\/kinsta.com\/it\/blog\/guida-su-jsx\/\">JSX<\/a> (JavaScript XML). JSX \u00e8 un&#8217;estensione della sintassi di JavaScript che permette di definire la struttura e il layout delle interfacce utente in modo altamente leggibile ed espressivo.<\/p>\n<p>Ad esempio, possiamo creare il contenuto della pagina iniziale (<strong>index.js<\/strong>) in questo modo:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\n\nexport default function Home() {\n  return (\n    &lt;&gt;\n      &lt;div&gt;\n        &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n        &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/&gt;\n  );\n}<\/code><\/pre>\n<h3>Collegare le pagine in Gatsby<\/h3>\n<p>Per creare un link a un&#8217;altra pagina, possiamo utilizzare il componente <code>Link<\/code> come segue:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { Link } from 'gatsby';\n\nexport default function Home() {\n    return (\n        &lt;&gt;\n            &lt;div&gt;\n                &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n                &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n                &lt;Link&gt; to=\"\/about\"&gt;About Us&lt;\/Link&gt;\n                &lt;Link&gt; to=\"\/blog\"&gt;Blog&lt;\/Link&gt;\n            &lt;\/div&gt;\n        &lt;\/&gt;\n    );\n}<\/code><\/pre>\n<p>Nell&#8217;esempio precedente, abbiamo importato il componente <code>Link<\/code> da <code>gatsby<\/code> e lo abbiamo utilizzato per creare collegamenti alla pagina &#8220;Chi siamo&#8221; e a un blog. La pagina &#8220;Chi siamo&#8221;, ad esempio, ha il percorso <code>\/about<\/code>. Quando gli utenti cliccheranno sul link &#8220;Chi siamo&#8221;, verranno indirizzati alla pagina <code>\/about<\/code>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>L&#8217;output del codice qui sopra pu\u00f2 apparire come due elementi collegati tra loro, ma \u00e8 solo a scopo esplicativo. In seguito verr\u00e0 creata una barra di navigazione per presentare questi link con lo stile appropriato.<\/p>\n<\/aside>\n\n<p>Per creare collegamenti a siti web esterni, possiamo utilizzare i normali tag di ancoraggio (<code>&lt;a&gt;<\/code>) con l&#8217;attributo <code>href<\/code>:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\n\nexport default function Home() {\n  return (\n        &lt;&gt;\n            &lt;div&gt;\n                &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n                &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n                &lt;div&gt;\n                    &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n                    &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n                    &lt;a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\" target=\"_blank\" rel=\"noreferrer\"&gt;\n                        &lt;div&gt;Read more&lt;\/div&gt;\n                    &lt;\/a&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/&gt;\n    );\n}<\/code><\/pre>\n<p>In questo caso, il link apre il sito esterno in una nuova scheda del browser grazie agli attributi <code>target=\"_blank\"<\/code> e <code>rel=\"noreferrer\"<\/code>.<\/p>\n<h3>Creare componenti in Gatsby<\/h3>\n<p>L&#8217;architettura a componenti di Gatsby permette di creare blocchi riutilizzabili per le pagine web. Invece di duplicare il codice in pi\u00f9 pagine, \u00e8 possibile incapsulare elementi comuni in componenti, rendendo cos\u00ec la base di codice pi\u00f9 organizzata, manutenibile ed efficiente.<\/p>\n<p>Supponiamo che il codice della homepage includa la sezione di navigazione, il contenuto principale e il footer:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { Link } from 'gatsby';\n\nexport default function Home() {\n  return (\n    &lt;&gt;\n      &lt;div className=\"nav-links\"&gt;\n        &lt;Link&gt; to=\"\/\"&gt;Home&lt;\/Link&gt;\n        &lt;Link&gt; to=\"\/about\"&gt;About&lt;\/Link&gt;\n        &lt;Link&gt; to=\"\/blog\"&gt;Blog&lt;\/Link&gt;\n      &lt;\/div&gt;\n      &lt;div&gt;\n        &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n        &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n        &lt;a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\"&gt;\n          &lt;div&gt;Read more&lt;\/div&gt;\n        &lt;\/a&gt;\n      &lt;\/div&gt;\n      &lt;div className=\"footer\"&gt;\n        &lt;p&gt;\n          Hosted with \u2764\ufe0f by Kinsta's{' '}\n          &lt;a&gt; href=\"https:\/\/kinsta.com\/static-site-hosting\"&gt;\n            Static Site Hosting\n          &lt;\/a&gt;\n          .\n        &lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/&gt;\n  );\n}<\/code><\/pre>\n<p>Immaginiamo di dover duplicare il codice della navbar e del footer per ogni pagina del sito. \u00c8 qui che entra in gioco la potenza dei componenti. Possiamo creare componenti riutilizzabili per la navbar, il footer e ogni pezzo di codice che si ripete su pi\u00f9 pagine e componenti.<\/p>\n<p>Per lavorare con i componenti in Gatsby, creiamo una cartella <strong>components<\/strong> nella cartella <strong>src<\/strong> per memorizzare tutti i componenti. Quindi, creiamo i nostri componenti, ad esempio <strong>Navbar.js<\/strong> e <strong>Footer.js<\/strong>. Nel file <strong>Navbar.js<\/strong>, separiamo il codice in questo modo:<\/p>\n<pre><code class=\"language-jsx\">import { Link } from 'gatsby';\nimport React from 'react';\n\nconst Navbar = () =&gt; {\n    return (\n        &lt;nav&gt;\n            &lt;div className=\"nav-links\"&gt;\n                &lt;Link to=\"\/\"&gt;Home&lt;\/Link&gt;\n                &lt;Link to=\"\/about\"&gt;About&lt;\/Link&gt;\n                &lt;Link to=\"\/blog\"&gt;Blog&lt;\/Link&gt;\n            &lt;\/div&gt;\n        &lt;\/nav&gt;\n    );\n};\n\nexport default Navbar;<\/code><\/pre>\n<p>E anche <strong>Footer.js<\/strong>:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nconst Footer = () =&gt; {\n    return (\n        &lt;div className=\"footer\"&gt;\n            &lt;p&gt;\n                Hosted with \u2764\ufe0f by Kinsta's{' '}\n                &lt;a&gt; href=\"https:\/\/kinsta.com\/static-site-hosting\"&gt;Static Site Hosting&lt;\/a&gt;\n                .\n            &lt;\/p&gt;\n        &lt;\/div&gt;\n    );\n};\n\nexport default Footer;<\/code><\/pre>\n<p>Successivamente, importiamo i file dei componenti nelle pagine o nei componenti e utilizziamo questo metodo:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Navbar from '..\/components\/Navbar';\nimport Footer from '..\/components\/Footer';\n\nexport default function Home() {\n  return (\n    &lt;&gt;\n      &lt;Navbar \/&gt;\n      &lt;div&gt;\n        &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n        &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n        &lt;a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\"&gt;\n          &lt;div&gt;Read more&lt;\/div&gt;\n        &lt;\/a&gt;\n      &lt;\/div&gt;\n      &lt;Footer \/&gt;\n    &lt;\/&gt;\n  );\n}<\/code><\/pre>\n<h3>Creare un componente di layout<\/h3>\n<p>Una pratica comune nello sviluppo web \u00e8 quella di creare un <a href=\"https:\/\/www.gatsbyjs.com\/docs\/how-to\/routing\/layout-components\/\" target=\"_blank\" rel=\"noopener noreferrer\">componente di layout<\/a> che racchiuda la struttura generale del sito. Il componente di layout in genere include elementi che appaiono in ogni pagina, come header, footer, menu di navigazione e barre laterali.<\/p>\n<p>Creiamo un nuovo file chiamato <strong>Layout.js<\/strong> nella cartella <strong>\/src\/components<\/strong>. Successivamente, definiamo la struttura del layout. Per questa guida, la struttura del layout includer\u00e0 solo la navbar e il footer:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Navbar from '.\/Navbar';\nimport Footer from '.\/Footer';\n\nconst Layout = ({ children }) =&gt; {\n    return (\n        &lt;div className=\"layout\"&gt;\n            &lt;Navbar \/&gt;\n            &lt;div&gt; className=\"content\"&gt;{children}&lt;\/div&gt;\n            &lt;Footer \/&gt;\n        &lt;\/div&gt;\n    );\n};\n\nexport default Layout;<\/code><\/pre>\n<p>In questo componente di layout, utilizziamo i componenti per avvolgere il contenuto della pagina (forniti come <code>children<\/code>). Per utilizzare il componente di layout nelle pagine, importiamolo e inseriamolo nel contenuto della pagina. Ad esempio, nella pagina <strong>index.js<\/strong>:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Layout from '..\/components\/Layout';\n\nexport default function Home() {\n  return (\n    &lt;Layout&gt;\n      &lt;div&gt;\n        &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n        &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n        &lt;a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\"&gt;\n          &lt;div&gt;Read more&lt;\/div&gt;\n        &lt;\/a&gt;\n      &lt;\/div&gt;\n    &lt;\/Layout&gt;\n  );\n}<\/code><\/pre>\n<p>Utilizzando un componente di layout, garantiamo una struttura e un aspetto coerenti in tutte le pagine, mantenendo il codice organizzato e manutenibile. \u00c8 un modo efficace per gestire gli elementi comuni del sito in modo efficiente.<\/p>\n<h3>Modificare lo stile delle pagine e dei componenti in Gatsby<\/h3>\n<p>Lo styling dei siti in Gatsby dispone di una certa flessibilit\u00e0 e permette di utilizzare diversi approcci, tra cui CSS normale, CSS-in-JS o preprocessori CSS come Sass. Scopriamo come creare uno stile normale e un modulo per le pagine.<\/p>\n<h4>Styling del CSS<\/h4>\n<p>In Gatsby \u00e8 possibile creare facilmente un file CSS e collegarlo a un componente o a una pagina che funziona perfettamente. Ad esempio, \u00e8 possibile creare una cartella <strong>styles<\/strong> nella cartella <strong>src<\/strong> e poi creare un file <strong>global.css<\/strong> con il proprio codice CSS.<\/p>\n<p>Ad esempio, ecco alcuni stili globali di base per i componenti creati in precedenza:<\/p>\n<pre><code class=\"language-css\">@import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500&display=swap');\n\n* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\nbody {\n    background-color: #ddd;\n    font-family: 'Poppins',\n        sans-serif;\n    width: 1200px;\n    margin: 0 auto;\n}\n\na {\n    text-decoration: none;\n}\n\nimg {\n    width: 100%;\n}\n\nnav {\n    display: flex;\n    justify-content: space-between;\n    height: 200px;\n    align-items: center;\n}\n\nnav .logo-img {\n    width: 100px;\n}\n\nnav .nav-links a {\n    padding: 0 20px;\n    font-size: 18px;\n}\n\n@media (max-width:700px) {\n    body {\n        width: 100%;\n        padding: 0 20px;\n    }\n\n    nav .nav-links a {\n        padding: 0 18px;\n    }\n}\n\n.footer {\n    width: 100%;\n    text-align: center;\n    margin: 100px 0 20px;\n}<\/code><\/pre>\n<p>Nel codice qui sopra, stiamo importando il font Poppins da <a href=\"https:\/\/kinsta.com\/it\/blog\/migliori-google-fonts\/\">Google Fonts<\/a> e poi definiamo gli stili di base da applicare a tutti i componenti.<\/p>\n<p>Successivamente, potrete importare il file CSS nei componenti a cui desiderate applicare lo stile, ma per questo progetto possiamo aggiungerlo al componente Layout in modo che si applichi globalmente:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Navbar from '.\/Navbar';\nimport Footer from '.\/Footer';\nimport '..\/styles\/global.css';\n\nconst Layout = ({ children }) =&gt; {\n    return (\n        &lt;div&gt;\n            &lt;Navbar \/&gt;\n            &lt;div&gt; className=\"content\"&gt;{children}&lt;\/div&gt;\n            &lt;Footer \/&gt;\n        &lt;\/div&gt;\n    );\n};\n\nexport default Layout;<\/code><\/pre>\n<h4>Stile dei moduli CSS<\/h4>\n<p>I moduli CSS permettono di applicare gli stili a componenti o pagine specifiche. In questo modo si evitano conflitti di stile e si facilita la manutenzione del codice. Nella cartella styles, creiamo i nostri moduli CSS utilizzando il formato <strong>&lt;nomepagina&gt;.module.css<\/strong> e aggiungiamo lo stile specifico al file.<\/p>\n<p>Ad esempio, creiamo <strong>home.module.css<\/strong> per la homepage e aggiungiamo il seguente codice:<\/p>\n<pre><code class=\"language-css\">.home_hero {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    text-align: center;\n\n}\n\n.home_hero h1 {\n    font-size: 60px;\n    width: 70%;\n}\n\n.home_hero p {\n    color: #6E7076;\n    font-size: 20px;\n}\n\n.btn {\n    background-color: #5333ed;\n    padding: 20px 30px;\n    margin-top: 40px;\n    border-radius: 5px;\n    color: #fff;\n}\n\n@media (max-width:700px) {\n    .home_hero h1 {\n        font-size: 40px;\n    }\n\n    .home_hero p {\n        font-size: 16px;\n    }\n}<\/code><\/pre>\n<p>Per utilizzare gli stili CSS del modulo nella nostra pagina o nel nostro componente Gatsby, importiamo gli stili del modulo CSS come oggetto all&#8217;inizio del file della pagina o del componente e usiamoli in questo modo:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Layout from '..\/components\/Layout';\nimport * as styles from '..\/styles\/home.module.css';\n\nexport default function Home() {\n  return (\n    &lt;Layout&gt;\n      &lt;div className={styles.home_hero}&gt;\n        &lt;h1&gt;Enjoy Static Site Hosting With Kinsta StSH.&lt;\/h1&gt;\n        &lt;p&gt;Fast, Secure, Reliable Hosting Solution.&lt;\/p&gt;\n        &lt;a href=\"https:\/\/docs.sevalla.com\/static-sites\/overview\"&gt;\n          &lt;div className={styles.btn}&gt;Read more&lt;\/div&gt;\n        &lt;\/a&gt;\n      &lt;\/div&gt;\n    &lt;\/Layout&gt;\n  );\n}<\/code><\/pre>\n<p><aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>\u00c8 anche possibile applicare lo stile in linea, in modo simile a quello dei componenti React.<\/p>\n<\/aside>\n<br \/>\n<aside data-B=\"SUNKdWJqUUZ6LlU=\" data-N=\"ZjJ2OUhPZG54Q01VbQ==\" data-r9j=\"UDJVeld0U2M5aHhu\" data-pI=\"bVY3dUJHSDRTLVJ5LjFJWXJiTjA=\" data-AMsEwq9=\"TWdYaC5ZemI0OEpTRVFmLQ==\" id=\"NzQyMDc=\" data-g=\"M00td1FkNVR4SnU=\" data-j8=\"bG1PMG5ld0lkNkZYem9E\" class=\"WzI1OTE4LDI2MjM4XQ==\" data-r3koi=\"Im1pZGRsZSI=|Iml0X0lUIg==\" data-1=\"T3B5VUMwUThLQlg3\" data-.VXCJkx=\"T1RNLVFHdG02N3k=\" data-H=\"cDZhNW0ucnVLUHFqeWtCVA==\"><\/aside><\/p>\n<h2>Usare i file statici in Gatsby<\/h2>\n<p>In Gatsby, i file statici si riferiscono a risorse come immagini, font, file CSS e altre risorse che vengono servite direttamente al browser del cliente senza alcuna elaborazione lato server. Questi file vengono aggiunti alla directory <strong>\/static<\/strong> nella radice del progetto.<\/p>\n<p>Ad esempio, se aggiungiamo un&#8217;immagine <strong>kinsta-logo.png<\/strong> alla cartella <strong>\/static<\/strong>, possiamo visualizzarla nel componente in questo modo:<\/p>\n<pre><code class=\"language-jsx\">import { Link } from 'gatsby';\nimport React from 'react';\n\nconst Navbar = () =&gt; {\n    return (\n        &lt;nav&gt;\n            &lt;Link&gt; to=\"\/\"&gt;\n                &lt;img src=\"\/kinsta-logo.png\" alt=\"Kinsta Logo\" className=\"logo-img\" \/&gt;\n            &lt;\/Link&gt;\n            &lt;div className=\"nav-links\"&gt;\n                &lt;Link&gt; to=\"\/\"&gt;Home&lt;\/Link&gt;\n                &lt;Link&gt; to=\"\/about\"&gt;About&lt;\/Link&gt;\n                &lt;Link&gt; to=\"\/blog\"&gt;Blog&lt;\/Link&gt;\n            &lt;\/div&gt;\n        &lt;\/nav&gt;\n    );\n};\n\nexport default Navbar;<\/code><\/pre>\n<p>Gatsby risolve automaticamente questi percorsi relativi con l&#8217;URL corretto quando il sito viene creato. Pi\u00f9 avanti in questa guida scopriremo come ottimizzare le immagini in Gatsby.<\/p>\n<h2>Plugin e integrazioni<\/h2>\n<p>Gatsby ha un ricco ecosistema di plugin che possono estendere le sue funzionalit\u00e0. Esistono plugin per la <a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-plugin-seo\/\" target=\"_blank\" rel=\"noopener noreferrer\">SEO<\/a>, le <a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-plugin-google-analytics\/\" target=\"_blank\" rel=\"noopener noreferrer\">statistiche<\/a>, l&#8217;ottimizzazione delle immagini, la trasformazione di markdown e molto altro ancora. Installare e configurare i plugin \u00e8 semplice e questi possono migliorare notevolmente le funzionalit\u00e0 del sito.<\/p>\n<p>In questa guida utilizziamo quattro plugin:<\/p>\n<ol start=\"1\">\n<li><a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-transformer-remark\/\" target=\"_blank\" rel=\"noopener noreferrer\">gatsby-transformer-remark<\/a>: questo plugin permette di trasformare i file Markdown in contenuti HTML, rendendo pi\u00f9 semplice la creazione e la gestione di post di blog, documentazione o qualsiasi altro contenuto testuale.<\/li>\n<li><a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-transformer-sharp\/\" target=\"_blank\" rel=\"noopener noreferrer\">gatsby-transformer-sharp<\/a> e <a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-plugin-sharp\/\" target=\"_blank\" rel=\"noopener noreferrer\">gatsby-plugin-sharp<\/a>: questi plugin lavorano insieme per ottimizzare e manipolare le immagini nel progetto Gatsby.<\/li>\n<li><a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-source-filesystem\/\" target=\"_blank\" rel=\"noopener noreferrer\">gatsby-source-filesystem<\/a>: questo plugin permette di creare dei file dalla directory del progetto e di renderli disponibili per le interrogazioni con GraphQL.<\/li>\n<\/ol>\n<p>Per utilizzare questi plugin nel nostro progetto Gatsby, eseguiamo il comando qui sotto nella directory principale del progetto per installarli:<\/p>\n<pre><code class=\"language-bash\">npm install gatsby-transformer-remark gatsby-transformer-sharp gatsby-plugin-sharp gatsby-source-filesystem<\/code><\/pre>\n<p>Successivamente, configuriamoli nel file <strong>gatsby-config.js<\/strong>. Ecco un esempio di come configurare i plugin:<\/p>\n<pre><code class=\"language-js\">module.exports = {\n    plugins: [\n        \/\/ ...other plugins\n        \/\/ Transform Markdown files into HTML\n        'gatsby-transformer-remark',\n        \/\/ Optimize and manipulate images\n        'gatsby-transformer-sharp',\n        'gatsby-plugin-sharp',\n        \/\/ Source files from your project directory\n        {\n            resolve: `gatsby-source-filesystem`,\n            options: {\n                name: `posts`,\n                path: `${__dirname}\/src\/posts\/`,\n            },\n        },\n        {\n            resolve: `gatsby-source-filesystem`,\n            options: {\n                name: `images`,\n                path: `${__dirname}\/src\/images\/`,\n            },\n        },\n    ],\n};<\/code><\/pre>\n<p>Vengono create due configurazioni di <code>gatsby-source-filesystem<\/code> che puntano a due cartelle: <strong>posts<\/strong> e <strong>images. <\/strong>Posts memorizzer\u00e0 alcuni file markdown (post del blog) che verranno trasformati con <code>gatsby-transformer-remark<\/code>, mentre images memorizzer\u00e0 le immagini del blog e altre immagini che desideriamo ottimizzare.<\/p>\n<p>Ricordate sempre di riavviare il server di sviluppo locale quando apportate delle modifiche al file <strong>gatsby-config.js<\/strong>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Le immagini memorizzate nella cartella <strong>src<\/strong> di un progetto Gatsby sono destinate ai contenuti dinamici e vengono ottimizzate dai plugin Gatsby, mentre le immagini nella cartella <strong>\/static<\/strong> vengono trattate come risorse statiche e rimangono invariate nell&#8217;output di build, rendendole adatte a elementi come loghi e icone.<\/p>\n<\/aside>\n\n<h2>Creare i post del blog<\/h2>\n<p>Ora che abbiamo configurato i nostri plugin, creiamo una cartella <strong>posts<\/strong> nella directory <strong>src<\/strong> e poi creiamo due file Markdown con il seguente contenuto:<\/p>\n<p><strong>post-1.md:<\/strong><\/p>\n<pre><code class=\"language-markdown\">---\ntitle: \"Introduction to Gatsby\"\ndate: \"2023-10-01\"\nslug: \"introduction-to-gatsby\"\ndescription: \"Learn the basics of Gatsby and its features.\"\nfeatureImg: ..\/images\/featured\/image-1.jpeg\n---\n\nWelcome to the world of Gatsby! In this post, we will introduce you to the basics of Gatsby and its powerful features.<\/code><\/pre>\n<p>E <strong>post-2.md<\/strong>:<\/p>\n<pre><code class=\"language-markdown\">---\ntitle: \"Optimizing Images in Gatsby\"\ndate: \"2023-10-05\"\nslug: \"optimizing-images-in-gatsby\"\ndescription: \"Explore how to optimize images in your Gatsby project.\"\nfeatureImg: ..\/images\/featured\/image-2.jpeg\n---\n\nImages play a crucial role in web development. In this post, we'll dive into how to optimize images in Gatsby using plugins.<\/code><\/pre>\n<p>Questi file Markdown contengono frontmatter con metadati sui post del blog, tra cui titoli, date, slug, descrizioni e percorsi delle immagini.<\/p>\n<h2>Interrogare Gatsby con GraphQL<\/h2>\n<p>Gatsby utilizza <a href=\"https:\/\/kinsta.com\/it\/blog\/graphql-vs-rest\/\">GraphQL<\/a> per interrogare e recuperare i dati del sito web. GraphQL \u00e8 un potente linguaggio di interrogazione che permette di richiedere esattamente i dati di cui si ha bisogno, rendendolo efficiente e flessibile. Scopriamo come interrogare i dati in Gatsby utilizzando GraphQL.<\/p>\n<p>Quando eseguite <code>gatsby develop<\/code> nel terminale, noterete che, oltre al link <a href=\"https:\/\/www.gatsbyjs.com\/plugins\/gatsby-source-filesystem\/\" target=\"_blank\" rel=\"noopener noreferrer\">gatsby-source-filesystem<\/a>, che apre il progetto sul web, vedrete anche l&#8217;URL <a href=\"http:\/\/localhost:8000\/___graphql\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8000\/___graphql<\/a>. Questo URL fornisce l&#8217;accesso all&#8217;<a href=\"https:\/\/www.gatsbyjs.com\/docs\/how-to\/querying-data\/running-queries-with-graphiql\/\" target=\"_blank\" rel=\"noopener noreferrer\">editor GraphiQL<\/a> per il progetto Gatsby.<\/p>\n<p>Aprendo l&#8217;editor, vedremo questa interfaccia:<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/graphiql-playground.png\" alt=\"L'interfaccia GraphiQL di Gatsby\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">L&#8217;interfaccia di GraphiQL di Gatsby.<\/figcaption><\/figure>\n<p>Da questo editor \u00e8 possibile interrogare tutte le informazioni sul sito. Ma dato che abbiamo creato i file markdown e abbiamo effettuato tutte le configurazioni nel file <strong>gatsby-config.js<\/strong>, interroghiamo i file Markdown e il loro contenuto con la seguente query nell&#8217;editor:<\/p>\n<pre><code class=\"language-json\">query BlogList {\n    allMarkdownRemark {\n        nodes {\n            frontmatter {\n                title\n                slug\n                description\n            }\n            id\n        }\n    }\n}<\/code><\/pre>\n<p>Questa query recupera i dati da tutti i file Markdown utilizzando <code>allMarkdownRemark<\/code>. Recupera i dati <code>title<\/code>, <code>slug<\/code> e <code>description<\/code> dal frontmatter di ogni file e anche il loro <code>id<\/code>.<\/p>\n<p>Dopo aver scritto la query, clicchiamo sul pulsante &#8220;Play&#8221; (un&#8217;icona a forma di triangolo rivolta verso destra) per eseguirla. I risultati verranno visualizzati sul lato destro dell&#8217;editor.<\/p>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/markdown-details-with-graphiql.png\" alt=\"Come utilizzare il playground di GraphiQL per ottenere informazioni markdown\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Come utilizzare il playground di GraphiQL per ottenere informazioni markdown.<\/figcaption><\/figure>\n<p>Possiamo quindi utilizzare GraphQL per interrogare i dati Markdown nei componenti o nelle pagine. Per interrogare questi dati nella pagina <strong>blog\/index.js<\/strong>, importiamo prima <code>graphql<\/code> da <code>gatsby<\/code>. Poi, in fondo al codice JSX, aggiungiamo quanto segue:<\/p>\n<pre><code class=\"language-json\">export const query = graphql`\nquery BlogList {\n    allMarkdownRemark {\n        nodes {\n            frontmatter {\n                title\n                slug\n                description\n            }\n            id\n        }\n    }\n}\n`;<\/code><\/pre>\n<p>Nel codice qui sopra, utilizziamo il tag <code>graphql<\/code> per creare una query GraphQL chiamata <code>query<\/code>. Ecco come dovrebbe apparire il file <strong>blog\/index.js<\/strong>:<\/p>\n<pre><code class=\"language-jsx\">import { graphql, Link } from 'gatsby';\nimport React from 'react';\nimport Layout from '..\/..\/components\/Layout';\nimport * as styles from '..\/..\/styles\/blog.module.css';\n\nconst blog = ({ data }) =&gt; {\n    const posts = data.allMarkdownRemark.nodes;\n    return (\n        &lt;Layout&gt;\n            &lt;div className={styles.blog_cont}&gt;\n                &lt;h2&gt;Blog&lt;\/h2&gt;\n                &lt;div className={styles.blog_grid}&gt;\n                    {posts.map((post) =&gt; (\n                        &lt;Link\n                            to={`\/blog\/${post.frontmatter.slug}`}\n                            className={styles.blog_card}\n                            key={post.id}\n                        &gt;\n                            &lt;h3&gt;{post.frontmatter.title}&lt;\/h3&gt;\n                            &lt;p&gt;{post.frontmatter.description}&lt;\/p&gt;\n                        &lt;\/Link&gt;\n                    ))}\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/Layout&gt;\n    );\n};\nexport default blog;\n\nexport const query = graphql`\nquery BlogList {\n    allMarkdownRemark {\n        nodes {\n            frontmatter {\n                title\n                slug\n                description\n            }\n            id\n        }\n    }\n}\n`;<\/code><\/pre>\n<p>Nel codice precedente, accediamo al risultato di <code>query<\/code> tramite il prop <code>data<\/code> nel componente. Successivamente, eseguiamo il loop dei dati di <code>posts<\/code> utilizzando il metodo <code><a href=\"https:\/\/kinsta.com\/it\/blog\/typeerror-cannot-read-property-map-of-undefined\/\">map()<\/a><\/code> e poi visualizziamo i titoli in un elenco.<\/p>\n<p>Per evitare errori, creiamo un file <strong>blog.module.css<\/strong> nella cartella <strong>styles<\/strong> e aggiungiamo il seguente codice:<\/p>\n<pre><code class=\"language-css\">.blog_cont h2 {\n    font-size: 40px;\n    margin-bottom: 20px;\n}\n\n.blog_grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    gap: 20px;\n}\n\n@media (max-width:700px) {\n    .blog_grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n.blog_card {\n    background-color: #bfbfbf;\n    padding: 20px;\n    border-radius: 5px;\n    color: #000;\n    transition: all .5s ease-in-out;\n}\n\n.blog_card:hover {\n    background-color: #5333ed;\n    color: #fff;\n}\n\n.blog_card h3 {\n    margin-bottom: 15px;\n}\n\n.blog_card p {\n    margin-bottom: 15px;\n}<\/code><\/pre>\n<figure id=\"attachment_105526\" aria-describedby=\"caption-attachment-105526\" style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/blog-posts-graphql.png\" alt=\"Visualizzazione dei post del blog recuperati tramite GraphQL\" width=\"1001\" height=\"471\"><figcaption id=\"caption-attachment-105526\" class=\"wp-caption-text\">Visualizzazione dei post del blog recuperati tramite GraphQL.<\/figcaption><\/figure>\n<h2>Capire i template e generare pagine dinamiche in Gatsby con GraphQL<\/h2>\n<p>In Gatsby, i template e le pagine dinamiche sono concetti essenziali che permettono di creare siti web flessibili e basati sui dati. I template permettono di definire la struttura e il layout delle pagine, mentre GraphQL aiuta a recuperare i dati per popolare questi template in modo dinamico.<\/p>\n<h3>Creare un template di post per il blog<\/h3>\n<p>Supponiamo di voler creare un blog in cui ogni post abbia una struttura coerente, che includa un titolo e un contenuto. Possiamo creare un template <code>BlogDetails<\/code> per definire questo layout. Nella cartella <strong>src<\/strong>, creiamo una cartella <strong>templates<\/strong>, quindi creiamo un file <strong>blog-details.js<\/strong>:<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport Layout from '..\/components\/Layout';\nimport * as styles from '..\/styles\/blog-details.module.css';\n\nconst BlogDetails = () =&gt; {\n\n    return (\n        &lt;Layout&gt;\n            &lt;div&gt;\n                &lt;div className={styles.blog_content}&gt;\n                    &lt;Img\n                        className={styles.blog_featured}\n                    \/&gt;\n                    &lt;h3&gt;Title&lt;\/h3&gt;\n                    &lt;div&gt;\n                        className={styles.html}\n                        dangerouslySetInnerHTML={}\n                    \/&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/Layout&gt;\n    );\n};\n\nexport default BlogDetails;<\/code><\/pre>\n<p>In questo esempio, il template <code>BlogDetails<\/code> definisce la struttura dei singoli post del blog. Successivamente, utilizziamo GraphQL per recuperare i dati relativi a specifici post del blog e passarli come props a questo template.<\/p>\n<h3>Generare pagine dinamiche<\/h3>\n<p>Per generare pagine dinamiche, creiamo un file <strong>gatsby-node.js<\/strong> nella directory principale del progetto. Questo file permette di definire le modalit\u00e0 di creazione delle pagine.<\/p>\n<p>Nel file <strong>gatsby-node.js<\/strong>, usiamo GraphQL per interrogare i dati che vogliamo usare per le pagine dinamiche. Ad esempio, se avete dei post del blog in Markdown, potete interrogare i loro slug:<\/p>\n<pre><code class=\"language-jsx\">const path = require(`path`);\n\nexports.createPages = async ({ graphql, actions }) =&gt; {\n  const { data } = await graphql(`\n    query Articles {\n      allMarkdownRemark {\n        nodes {\n          frontmatter {\n            slug\n          }\n        }\n      }\n    }\n  `);\n\n  data.allMarkdownRemark.nodes.forEach((node) =&gt; {\n    actions.createPage({\n      path: '\/blog\/' + node.frontmatter.slug,\n      component: path.resolve('.\/src\/templates\/blog-details.js'),\n      context: { slug: node.frontmatter.slug },\n    });\n  });\n};<\/code><\/pre>\n<p>In questo esempio, interroghiamo gli slug di tutti i post Markdown e creiamo pagine dinamiche per ogni post utilizzando il template <code>BlogDetails<\/code>. L&#8217;oggetto contesto viene utilizzato per passare i dati al template. Questi dati (slug) sono utilizzati dal template per recuperare altri dati che si allineano con lo slug.<\/p>\n<p>Vediamo come funziona l&#8217;ottimizzazione delle immagini in Gatsby prima di aggiungere una query GraphQL alla pagina del template.<\/p>\n<h3>Ottimizzazione delle immagini in Gatsby<\/h3>\n<p>In precedenza, abbiamo installato e configurato <code>gatsby-transformer-sharp<\/code> e <code>gatsby-plugin-sharp<\/code> insieme a <code>gatsby-source-filesystem<\/code> per recuperare le immagini.<\/p>\n<p>Con questi plugin, possiamo interrogare e ottimizzare le immagini con GraphQL. Ecco un esempio di come interrogare e visualizzare un&#8217;immagine ottimizzata utilizzando <code>gatsby-plugin-sharp<\/code>:<\/p>\n<pre><code class=\"language-json\">export const query = graphql`\n  query {\n    file(relativePath: { eq: \"example.jpg\" }) {\n      childImageSharp {\n        fluid {\n          ...GatsbyImageSharpFluid\n        }\n      }\n    }\n  }\n`;<\/code><\/pre>\n<p>Nel codice qui sopra, stiamo interrogando un&#8217;immagine denominata <strong>example.jpg<\/strong> dalla sorgente <strong>immagini<\/strong> e stiamo utilizzando la propriet\u00e0 <code>fluid<\/code> dell&#8217;immagine interrogata per visualizzarla con un rendering reattivo e ottimizzato.<\/p>\n<p>Possiamo quindi importare <code>Img<\/code> da <code>gatsby-image<\/code> per lavorare con le immagini ottimizzate.<\/p>\n<pre><code class=\"language-jsx\">import React from 'react';\nimport { graphql } from 'gatsby';\nimport Img from 'gatsby-image';\n\nconst ImageExample = ({ data }) =&gt; {\n  const { fluid } = data.file.childImageSharp;\n\n  return (\n    &lt;div&gt;\n      &lt;Img fluid={fluid} alt=\"Example Image\" \/&gt;\n    &lt;\/div&gt;\n  );\n};\n\nexport default ImageExample;<\/code><\/pre>\n<h3>Interrogare le pagine dinamiche<\/h3>\n<p>Gatsby utilizzer\u00e0 il template specificato per creare pagine individuali per ogni post del blog. Aggiungiamo ora una query GraphQL alla pagina del template per recuperare i dati in base allo slug:<\/p>\n<pre><code class=\"language-jsx\">import { graphql } from 'gatsby';\nimport Img from 'gatsby-image';\nimport React from 'react';\nimport Layout from '..\/components\/Layout';\nimport * as styles from '..\/styles\/blog-details.module.css';\n\nconst BlogDetails = ({ data }) =&gt; {\n    const { html } = data.markdownRemark;\n    const { title, featureImg } = data.markdownRemark.frontmatter;\n    return (\n        &lt;Layout&gt;\n            &lt;div&gt;\n                &lt;div className={styles.blog_content}&gt;\n                    &lt;Img\n                        fluid={featureImg.childImageSharp.fluid}\n                        className={styles.blog_featured}\n                    \/&gt;\n                    &lt;h3&gt;{title}&lt;\/h3&gt;\n                    &lt;div\n                        className={styles.html}\n                        dangerouslySetInnerHTML={{ __html: html }}\n                    \/&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/Layout&gt;\n    );\n};\n\nexport default BlogDetails;\n\nexport const query = graphql`\n    query ProjectDetails($slug: String) {\n        markdownRemark(frontmatter: { slug: { eq: $slug } }) {\n            html\n            frontmatter {\n                title\n                featureImg {\n                    childImageSharp {\n                        fluid {\n                            ...GatsbyImageSharpFluid\n                        }\n                    }\n                }\n            }\n        }\n    }\n`;<\/code><\/pre>\n<p>Nel codice qui sopra, noterete che stiamo eseguendo una query per l&#8217;immagine ottimizzata e una query per il post del blog che corrisponde allo slug.<\/p>\n<p>Potete consultare il codice sorgente completo di questo <a href=\"https:\/\/github.com\/kinsta\/kinsta-gatsby-quickstart\" target=\"_blank\" rel=\"noopener noreferrer\">progetto Gatsby su GitHub<\/a>.<\/p>\n<h2>Distribuire i siti statici Gatsby con Kinsta<\/h2>\n<p>Kinsta permette di <a href=\"https:\/\/sevalla.com\/static-site-hosting\/\">ospitare fino a 100 siti web statici<\/a> <strong>gratuitamente<\/strong>. Per farlo \u00e8 sufficiente inviare il codice al vostro provider Git preferito (<a href=\"https:\/\/docs.sevalla.com\/applications\/git\/bitbucket#grant-access-to-the-kinsta-bitbucket-application\">Bitbucket<\/a>, <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">GitHub<\/a> o <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/gitlab#authorize-the-kinsta-gitlab-application\">GitLab<\/a>) e poi distribuirlo su Kinsta.<\/p>\n<p>Una volta che il repo sar\u00e0 pronto, seguite questi passaggi per distribuire il vostro sito statico su Kinsta:<\/p>\n<ol start=\"1\">\n<li>Accedete o create un account per visualizzare il vostro cruscotto <a href=\"https:\/\/my.kinsta.com\/?lang=it\">MyKinsta<\/a>.<\/li>\n<li>Autorizzate Kinsta con il vostro provider Git.<\/li>\n<li>Cliccate su <strong>Siti statici<\/strong> nella barra laterale di sinistra e poi su <strong>Aggiungi sito<\/strong>.<\/li>\n<li>Selezionate il repository e il branch da cui desiderate effettuare il deploy.<\/li>\n<li>Assegnate un nome unico al sito.<\/li>\n<li>MyKinsta rilever\u00e0 automaticamente le impostazioni di build per questo progetto Gatsby. Vedrete le seguenti impostazioni precompilate:\n<ul>\n<li><strong>Comando di build:<\/strong> <code>npm run build<\/code><\/li>\n<li><strong>Versione Node:<\/strong> <code>18.16.0<\/code><\/li>\n<li><strong>Directory di pubblicazione:<\/strong> <code>public<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Infine, cliccate su <strong>Crea sito<\/strong>.<\/li>\n<\/ol>\n<p>E il gioco \u00e8 fatto! In pochi secondi avrete un sito distribuito, e riceverete un link per accedere alla versione distribuita del sito. In seguito, potrete aggiungere il vostro <a href=\"https:\/\/docs.sevalla.com\/applications\/domains\">dominio personalizzato<\/a> e il vostro <a href=\"https:\/\/docs.sevalla.com\/applications\/domains#install-a-custom-ssl-certificate\">certificato SSL<\/a>, se lo desiderate.<\/p>\n<p>In alternativa all&#8217;Hosting di Siti Statici, potreste scegliere di distribuire il vostro sito statico con l&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a> di Kinsta, che offre una maggiore flessibilit\u00e0 di hosting, una gamma pi\u00f9 ampia di vantaggi e l&#8217;accesso a funzioni pi\u00f9 strutturate. Ad esempio, la scalabilit\u00e0, la distribuzione personalizzata tramite un file Docker e l&#8217;<a href=\"https:\/\/docs.sevalla.com\/applications\/analytics\">analisi completa<\/a> dei dati storici e in tempo reale.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Questa guida copre le basi del data sourcing, del routing, dello styling, dell&#8217;ottimizzazione delle immagini, dei plugin, della distribuzione e molto altro ancora.<\/p>\n<p>La flessibilit\u00e0, la velocit\u00e0 e il ricco ecosistema di Gatsby lo rendono una scelta ottimale per la creazione di siti web statici. Che stiate creando un blog personale, un sito di portfolio o un sito aziendale, Gatsby pu\u00f2 essere la soluzione ideale per voi.<\/p>\n<p><em>Ora \u00e8 il momento di mettere in pratica le vostre conoscenze e iniziare a costruire il vostro sito Gatsby. Avete gi\u00e0 utilizzato Gatsby per creare qualcosa? Non esitate a condividere con noi i vostri progetti e le vostre esperienze nella sezione commenti qui sotto.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I siti web statici sono tornati alla ribalta negli ultimi anni grazie alla loro velocit\u00e0, sicurezza e semplicit\u00e0. Uno dei principali strumenti per la creazione di &#8230;<\/p>\n","protected":false},"author":287,"featured_media":74208,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25918,26238],"class_list":["post-74207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-framework-javascript","topic-generatore-siti-statici"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Guida completa alla costruzione di siti statici con Gatsby - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guida completa alla costruzione di siti statici con Gatsby\" \/>\n<meta property=\"og:description\" content=\"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-30T12:32:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-31T08:53:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Guida completa alla costruzione di siti statici con Gatsby\",\"datePublished\":\"2023-10-30T12:32:38+00:00\",\"dateModified\":\"2023-10-31T08:53:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\"},\"wordCount\":3148,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\",\"name\":\"Guida completa alla costruzione di siti statici con Gatsby - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\",\"datePublished\":\"2023-10-30T12:32:38+00:00\",\"dateModified\":\"2023-10-31T08:53:42+00:00\",\"description\":\"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/gatsby\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/gatsby\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generatore di Siti Statici\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/generatore-siti-statici\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guida completa alla costruzione di siti statici con Gatsby\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Guida completa alla costruzione di siti statici con Gatsby - Kinsta\u00ae","description":"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/gatsby\/","og_locale":"it_IT","og_type":"article","og_title":"Guida completa alla costruzione di siti statici con Gatsby","og_description":"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.","og_url":"https:\/\/kinsta.com\/it\/blog\/gatsby\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-10-30T12:32:38+00:00","article_modified_time":"2023-10-31T08:53:42+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"24 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Guida completa alla costruzione di siti statici con Gatsby","datePublished":"2023-10-30T12:32:38+00:00","dateModified":"2023-10-31T08:53:42+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/"},"wordCount":3148,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/gatsby\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/","url":"https:\/\/kinsta.com\/it\/blog\/gatsby\/","name":"Guida completa alla costruzione di siti statici con Gatsby - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","datePublished":"2023-10-30T12:32:38+00:00","dateModified":"2023-10-31T08:53:42+00:00","description":"Libera la potenza di Gatsby con la nostra guida completa! Scopri come costruire siti web statici ultraveloci, dalla configurazione alla distribuzione.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/gatsby\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/10\/gatsby.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/gatsby\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Generatore di Siti Statici","item":"https:\/\/kinsta.com\/it\/argomenti\/generatore-siti-statici\/"},{"@type":"ListItem","position":3,"name":"Guida completa alla costruzione di siti statici con Gatsby"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=74207"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74207\/revisions"}],"predecessor-version":[{"id":74217,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/74207\/revisions\/74217"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/74207\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/74208"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=74207"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=74207"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=74207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}