{"data":{"markdownRemark":{"html":"<p>Non le MVP n’est pas le Most Valuable Player mais bien le Minimum Viable Project.</p>\n<p>Cette semaine je me suis attachée à faire une première version du site de commit42 avec uniquement les fonctionnalités primordiales, ça sera ma base de travail que je vais venir améliorer de sprint en sprint.</p>\n<h2>Le MVP</h2>\n<h4><em>“Euh rappelle-moi Eva, c’est quoi un MVP déjà ?”</em></h4>\n<p>Comme je le disais dans l’introduction c’est le Produit Minimum Viable (Minimum Viable Project en anglais). En gros c’est le projet sous sa forme la plus simple, avec les fonctionnalités minimales, sans fioritures. Le MVP permet d’avoir rapidement quelque chose de concret même si c’est au détriment de certaines fonctionnalités intéressantes mais non vitales tel que l’aspect visuel.</p>\n<p>Ce qui est intéressant aussi avec le MVP c’est qu’on a un retour utilisateur et un retour d’expérience rapidement, on peut alors ajuster le projet sur les prochains sprints en fonction de cette base.</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/03e1ea9b0b119f65ec968823a5b6540e/e11df/mvp.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 970px;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 60.6%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAACmklEQVQoz21Sy27TQBT1RyFB20Riy4oFP8APsOcH2CDBDtg0DlUbKCot4iVBu0BULWpF27SlyktJ3KQPJ2n8GHvs+DGewx0HUSFh6cj3zNx77tw5o925cevwwd0i7t2/mRVuz8q52QIKBcLcHGF2Gv+PX69JirNisYiZmZkjbVEv4+1iSS4tz0Mvl6CXdMI8Si+XCK8oLuUo6QsoLSxD1/Up8pxFQmWao+uyXC5DE1mWCQlkAlKITIo0hQBxpwk5PoDaExnxyRUycxNCCMoVeY50W4BdlalUtSlIKtNGw6E0jC76/b4cDAawrTESyk7sIySjzWmcZhCBSYJfkCYp4jjKm0SDQ8QXm1DaaZxgPB5LrdfroVKpYG1tDc1mE77vQ0oB6kegTJmpAviRj8awjigOc27aHTz7+hjP15+iZu8gFD6Yy6DZtg3XdeE4DizLAmOMuiewAgMW7+YxaGyj18DOwTrMy/NcsHvZwqf9ZWyPPuL97huY7Ay+x6eC/8KBS+KMTQgRxdTMpTXXg8fivLFLnDkMgZcioQNzJ4RH+7ZjQ1OnU2NyzvM/U8k+CV1sg/U/g3khgcO9asLpvobL3Kkgj8HPt+AbH+D4QV6nmmlDMqXdbqNer8tGowHi+UiIziB5HddfRBdZ+8voFsAHLUzMXzmlTwlKzTAMubGxgZWVFbm6uopOp4MkieEFk9wUNQF5jJNhFSfeEQ4GW7AnY5yOanj07iFefH+CffObTERMuUxqQRAgDEMZRRH+xDDp+XT7HdjBCM1WC1ESoVrfQ93aw8/2D5wN+xhZQxz3d9EOqtitbSOIuOQ8yE059TxPvaFMuayMUU6rNfUM1L06ZEzghwjIqNCfkDl018wjHoK7IUIeZcoDqu39Bm1fSKOAjfGqAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"Schema MVP\"\n        title=\"Schema MVP\"\n        src=\"/static/03e1ea9b0b119f65ec968823a5b6540e/9435c/mvp.png\"\n        srcset=\"/static/03e1ea9b0b119f65ec968823a5b6540e/02020/mvp.png 243w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/d40d9/mvp.png 485w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/9435c/mvp.png 970w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/e11df/mvp.png 1000w\"\n        sizes=\"(max-width: 970px) 100vw, 970px\"\n      />\n  </span>\n  </a></p>\n<p><em>Crédits icônes: Freepik</em></p>\n<p>Le MVP est donc la base de travail, comme les fondations d’une maison sur lesquelles on va venir ajouter petit à petit les briques jusqu’à ce que la maison soit satisfaisante.</p>\n<h4><em>“C’est vachement intéressant ça, mais du coup d’où tu es partie ? Tu avais un modèle ?”</em></h4>\n<p>Vu que je m’occupe d’une refonte de site, je suis partie sur une reproduction des fonctions du site actuel mais en reprenant le code à 0 avec la <a href=\"https://www.commit42.fr/blog/un-nouveau-site-pour-une-nouvelle-annee/\">nouvelle stack</a>.</p>\n<p>Il était convenu que je reprenne exactement ce qui est déjà sur le site - c’est à dire :</p>\n<ul>\n<li>une page d’accueil très minimaliste,</li>\n<li>une partie blog avec la liste des articles et la possibilité de voir un article... tout en y ajoutant Netlify CMS, afin de pouvoir rédiger et publier facilement des articles.</li>\n</ul>\n<p>En effet la publication d’articles sur le site en l’état est problématique car il faut rédiger soi-même l’article en <a href=\"https://fr.wikipedia.org/wiki/Markdown\">markdown</a> puis l’envoyer sur le repo distant pour que l’application soit redéployée.</p>\n<p>Avec la solution que je propose (Netlify CMS) il y aura un éditeur de texte qui créer lui même le fichier markdown à partir du texte entré (en prenant en compte les titres, images, liens…), ce qui sera tout de même plus simple.</p>\n<h4><em>“Et c’est tout ? T’as pas galéré ou quoi ?”</em></h4>\n<p>Ah si si.</p>\n<p>Surtout pour configurer les routes (l’url d’accès à une page) comme je le souhaitais. En fait pour ne pas perdre l’indexation des articles déjà publiés par commit42 et surtout ne pas casser les liens qui ont déjà pu être partagés sur internet j’ai voulu reprendre exactement la même structure. Et ça ne s’est pas tout à fait passé comme prévu.</p>\n<h2>Comment configurer les routes avec Netlify CMS</h2>\n<p>Je souhaitais donc avec des liens avec la structure suivante:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">http://commit42.com/blog/[insérer ici le nom de l’article]</code></pre></div>\n<p>Et il se trouve que dans la config de Netlify CMS on peut ajouter une ‘preview_path’ qui permet - du moins c’est ce que je pensais - formater l’url des posts à partir des slugs.</p>\n<p>Le slug est une chaîne de caractère qui identifie un article et que l’on peut utiliser dans l’url de celui-ci. Il est souvent généré à partir du titre et parfois de la date. Tous les mots/chiffres sont séparés par de tirets de cette façon: <code class=\"language-text\">ceci-est-un-slug-3</code></p>\n<p>Ici il va me servir pour définir ma route vers mes articles.</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">collections</span><span class=\"token punctuation\">:</span>  \n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> posts\n      <span class=\"token key atrule\">slug</span><span class=\"token punctuation\">:</span> “<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span>slug<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>”  \n      <span class=\"token key atrule\">preview_path</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"blog/{{slug}}\"</span></code></pre></div>\n<p>Ici j’ai défini une collection, donc un type de données, qui s’appelle <code class=\"language-text\">posts</code> et qui pour chaque post va créer un slug à partir du titre (ça c’est ce que fait tout seul Netlify CMS).</p>\n<p>Je pensais donc que <code class=\"language-text\">preview_path</code> permettait de configurer la route que l’on souhaite afficher pour les posts, car actuellement la seule route que j’arrivais à afficher est:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">http://commit42.com/[Insérer ici un slug]</code></pre></div>\n<p>En fait j’ai fini par comprendre que cette preview path permet, lorsque l’on rédige un article, de voir un aperçu de l’article comme s’il était publié sur le site. Finalement c’est tout à fait logique mais je n’avais pas compris tout de suite.</p>\n<p>Heureusement Maxime, qui connaît déjà bien GatsbyJS, avait déjà eu à faire à ce souci de routes et il m’a expliqué qu’il fallait créer à la main une route pour les articles.</p>\n<p>J’ai donc dû ajouter cette fonction à mon fichier <code class=\"language-text\">gatsby-node.js</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// A mettre tout en haut du fichier</span>\n<span class=\"token keyword\">const</span>  <span class=\"token punctuation\">{</span> createFilePath <span class=\"token punctuation\">}</span>  <span class=\"token operator\">=</span>  <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"gatsby-source-filesystem\"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// Ici le code que vous avez peut-être déjà</span>\n  \nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onCreateNode</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> node<span class=\"token punctuation\">,</span> actions<span class=\"token punctuation\">,</span> getNode <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>  \n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> createNodeField <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> actions  \n  \n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">.</span>internal<span class=\"token punctuation\">.</span>type <span class=\"token operator\">===</span> <span class=\"token template-string\"><span class=\"token string\">`MarkdownRemark`</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>  \n      <span class=\"token keyword\">const</span> value <span class=\"token operator\">=</span> <span class=\"token function\">createFilePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> node<span class=\"token punctuation\">,</span> getNode <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>  \n      <span class=\"token function\">createNodeField</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>  \n          name<span class=\"token punctuation\">:</span> <span class=\"token template-string\"><span class=\"token string\">`slug`</span></span><span class=\"token punctuation\">,</span>  \n\t      node<span class=\"token punctuation\">,</span>  \n          value<span class=\"token punctuation\">,</span>  \n       <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>  \n    <span class=\"token punctuation\">}</span>  \n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Ainsi à chaque fois d’un fichier markdown est détecté, GatsbyJS crée une route à partir du dossier dans lequel est stocké le fichier en question, pour moi <code class=\"language-text\">/blog/</code> en y concaténant son slug à la fin, ce qui donne </p>\n<p><code class=\"language-text\">http://commit42.com/blog/[Insérer ici un slug]</code>.</p>\n<p>Je vous recommande vivement d’aller voir <a href=\"https://scotch.io/tutorials/zero-to-deploy-a-practical-guide-to-static-sites-with-gatsbyjs#toc-creating-blog-pages\">cet article</a> qui approfondi ce cas plus en détail et donne des explications sur les fonctions utilisées.</p>\n<h2>Ajouter des composants SEO</h2>\n<p>Si vous vous souvenez bien , dans mon <a href=\"https://www.commit42.fr/blog/un-nouveau-site-pour-une-nouvelle-annee/\">premier article</a> je mentionnais le fait qu’améliorer le référencement du site est un des points les plus importants. C’est pourquoi j’ai décidé d’implémenter des composants SEO dans le MVP.</p>\n<p>Afin de créer une fonctionnalité la plus complète possible j’ai créé 3 composants:</p>\n<ul>\n<li>un pour les balises meta du site qui vont avoir un impact sur les moteurs d’indexation (qui sont habituellement dans une balise HEAD)</li>\n<li>un pour le protocole Open Graph</li>\n<li>et un pour les Twitter Cards.</li>\n</ul>\n<h4><em>“Olala Eva je comprends rien à ce que tu racontes, ça veut dire quoi tout ça ?”</em></h4>\n<p><strong>Les balises meta</strong></p>\n<p>Les balises meta sont la base du SEO , il s’agit de balises qui permettent d’optimiser le référencement des pages.</p>\n<p>Elles se présentent de la façon suivante:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">></span></span>  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">></span></span>  \n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>commit42 | Studio de développement Web - React - Progressive Web Apps - CakePHP<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>  \n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>description<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>commit42, studio d'innovation Web et Data sur Toulouse. Nous accompagnons et développons vos projets Web : React, CakePhp et Magento.<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">></span></span>  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n    // Ici le body\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Et permettent d’avoir l’affichage suivant dans google:</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/73e570ba1bf31505c36f198e8df373d9/0794e/commit42-google.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 617px;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 16.53160453808752%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsSAAALEgHS3X78AAAAm0lEQVQI101Oiw6DIAz0/3/STSgv3RSkKCHxVlmWrMnl2ubu2mF5ZYzPFYoitIl4SG/sDiLGpG7O8L6AdEYIB5wrsIK41a5hbvivIbxnjKRAwYJmh8kZLOuGwhU5nx2cDzGeHaWc2Pej82+utaK1huu6MCxzgFZKrgf5xMM7C2MIzhr5SiOlJCZG5izhX9y7lKIEcucYo2hKD/wAC97kj7tc+ywAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"Affichage Google\"\n        title=\"Affichage Google\"\n        src=\"/static/73e570ba1bf31505c36f198e8df373d9/0794e/commit42-google.png\"\n        srcset=\"/static/73e570ba1bf31505c36f198e8df373d9/02020/commit42-google.png 243w,\n/static/73e570ba1bf31505c36f198e8df373d9/d40d9/commit42-google.png 485w,\n/static/73e570ba1bf31505c36f198e8df373d9/0794e/commit42-google.png 617w\"\n        sizes=\"(max-width: 617px) 100vw, 617px\"\n      />\n  </span>\n  </a></p>\n<p>Si ces balises sont mal renseignées certaines pages pourraient ne pas apparaître sur google et donc moins faire connaître le site (vu que personne ne pourra les trouver).</p>\n<p><strong>Open Graph</strong></p>\n<p>Le protocole Open Graph a été développé par Facebook en 2010 et permet d’optimiser l’aperçu d’un lien lorsqu’on le partage sur les réseaux sociaux. Il se base justement sur les balises meta pour générer un aperçu avec le titre, la description et l’image de la page.</p>\n<p>Comme les articles de blog sont diffusés systématiquement via les réseaux sociaux, qui sont la source de trafic principale du blog à l’heure actuelle, rendre les liens attrayants lorsqu’ils sont partagés est une fonction essentielle.</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/27ebd6974e514fcccd2b18bf1b77f4b2/e11df/schema-opengraph.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 970px;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 60.6%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAAB/klEQVQoz5WSzW4SURTH55FYSLQFSoAF7crgtkgw6kr7Ai1tfQYSFmwGTBMXxh1sgAV9AaKAEGDBx0JgZoARmOEjMPfvvadTrFE0nuSXc+6dc/8558yRTh49+XL21INn0ceW23vIXIduuFwuwu3+Gf8FxrE8Hg8ODg7K0o2cwqcbmX34KCP9PoVUipO+87Isk0+n0xT/AyZypc12a+HOmM3/2u7dlmtJmqax2WyG29siKxQKKBaLyGQy6PV6lK1qI3wuf8W3/hD9oYr+QMGAvIqBovFYg/59xgzDgKqqTJpMJpjP5xAX94jzcrnEarWCZVm/l/LATHMBc7Ggd0JrJ7her3ciAhHzFlCr1ZDNZpHP55HL5X5B3On6BJvNhjRIcDwek8A+SyQScDgc8Pn9ODryEl6vlzYgEAig2+1S3oJXKbSoQlFuo9FAtVpFuVxGqVSCoiiUmEwmcXx8gpevXiMafYFw+DlOT8OIRCIIhULodDp26+ZOkAbabDZZq9VCvV5HpVLBaDSixHg8DqfTiWAwCD+v0ufzEX7bt9ttGq8tyETLTMxr38pkMlm8eXuGy6srXMRiRCx2ifPzC1xfv4OiqvTWbplJ0+lU9M+40R99iLDZ3MCQr4dhLjHnmIsVDIEdWxa7nyETWqLlriiXHyxxsQ9d1/+I/d2y16b3A/tYHUUyvGIjAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"Affichage Open Graph\"\n        title=\"\"\n        src=\"/static/27ebd6974e514fcccd2b18bf1b77f4b2/9435c/schema-opengraph.png\"\n        srcset=\"/static/27ebd6974e514fcccd2b18bf1b77f4b2/02020/schema-opengraph.png 243w,\n/static/27ebd6974e514fcccd2b18bf1b77f4b2/d40d9/schema-opengraph.png 485w,\n/static/27ebd6974e514fcccd2b18bf1b77f4b2/9435c/schema-opengraph.png 970w,\n/static/27ebd6974e514fcccd2b18bf1b77f4b2/e11df/schema-opengraph.png 1000w\"\n        sizes=\"(max-width: 970px) 100vw, 970px\"\n      />\n  </span>\n  </a></p>\n<p><strong>Les Twitter Cards</strong> </p>\n<p>Les Twitter Cards sont exactement la même chose que Open Graph mais spécifiquement pour Twitter.</p>\n<p>Si vous souhaitez comprendre étape par étape comment créer des composants SEO pour GatsbyJS, je vous invite à aller voir la documentation de <a href=\"https://www.gatsbyjs.org/docs/add-seo-component/\">GastbyJS</a> qui m’a grandement aidée ainsi que ces deux repos: <a href=\"https://github.com/LeKoArts/gatsby-starter-prismic/blob/master/src/components/SEO/SEO.jsx\">gastby-starter-prismic</a> et de <a href=\"https://github.com/jlengstorf/marisamorby.com/blob/master/src/components/SEO/SEO.js\">marisamorby.com</a>. </p>\n<h4><em>“C’est bien joli toute cette théorie Eva mais en vrai comment ça marche ?”</em></h4>\n<p>Voici à quoi ressemble mes composants:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n\n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span>  <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span>  <span class=\"token punctuation\">{</span> Helmet <span class=\"token punctuation\">}</span>  <span class=\"token keyword\">from</span>  <span class=\"token string\">\"react-helmet\"</span>\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span>  <span class=\"token string\">\"prop-types\"</span>\n<span class=\"token keyword\">import</span>  <span class=\"token punctuation\">{</span> StaticQuery<span class=\"token punctuation\">,</span> graphql <span class=\"token punctuation\">}</span>  <span class=\"token keyword\">from</span>  <span class=\"token string\">\"gatsby\"</span>\n<span class=\"token keyword\">import</span> favicon <span class=\"token keyword\">from</span>  <span class=\"token string\">'../../../static/favicon.png'</span>\n<span class=\"token keyword\">import</span> Facebook <span class=\"token keyword\">from</span>  <span class=\"token string\">'./Facebook'</span>\n<span class=\"token keyword\">import</span> Twitter <span class=\"token keyword\">from</span>  <span class=\"token string\">'./Twitter'</span>\n\n<span class=\"token keyword\">const</span>  <span class=\"token function-variable function\">SEO</span>  <span class=\"token operator\">=</span>  <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span>  title<span class=\"token punctuation\">,</span>  description<span class=\"token punctuation\">,</span>  image<span class=\"token punctuation\">,</span>  pathname<span class=\"token punctuation\">,</span>  article  <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span>  <span class=\"token operator\">=></span>  <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>StaticQuery \n      query<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>query<span class=\"token punctuation\">}</span>\n      render<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span>\n        site<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n          siteMetadata<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            defaultTitle<span class=\"token punctuation\">,</span>\n            defaultDescription<span class=\"token punctuation\">,</span>\n            siteUrl<span class=\"token punctuation\">,</span>\n            defaultImage<span class=\"token punctuation\">,</span>\n            twitterUsername<span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">}</span> \n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> seo <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n          title<span class=\"token punctuation\">:</span> title <span class=\"token operator\">||</span> defaultTitle<span class=\"token punctuation\">,</span>\n          description<span class=\"token punctuation\">:</span> description <span class=\"token operator\">||</span> defaultDescription<span class=\"token punctuation\">,</span>\n          image<span class=\"token punctuation\">:</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>siteUrl<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>image  <span class=\"token operator\">||</span>  defaultImage<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></span><span class=\"token punctuation\">,</span>\n          url<span class=\"token punctuation\">:</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>siteUrl<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>pathname  <span class=\"token operator\">||</span>  <span class=\"token string\">'/'</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></span>\n        <span class=\"token punctuation\">}</span>  \n\t\t\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Helmet</span></span>  <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span>  <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>fr<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span>  <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>description<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span>  <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>image<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>image<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span>  <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>shortcut icon<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>favicon<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>link</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Helmet</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Facebook</span></span>\n              <span class=\"token attr-name\">desc</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">image</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>image<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">type</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>article <span class=\"token operator\">?</span> <span class=\"token string\">'article'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'website'</span><span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">url</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">}</span></span>\n            <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Twitter</span></span>\n              <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">image</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>image<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">desc</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">username</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>twitterUsername<span class=\"token punctuation\">}</span></span>\n            <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n         </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n    <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span>  <span class=\"token keyword\">default</span> <span class=\"token constant\">SEO</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">SEO</span><span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span>  <span class=\"token punctuation\">{</span>\n  title<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  description<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  image<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  pathname<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  article<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>bool<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n  \n<span class=\"token constant\">SEO</span><span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span>  <span class=\"token punctuation\">{</span>\n  title<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  description<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  image<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  pathname<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  article<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> query <span class=\"token operator\">=</span>  graphql<span class=\"token template-string\"><span class=\"token string\">`\n  query SEO {\n    site {\n      siteMetadata {\n        defaultTitle: title\n        defaultDescription: description\n        siteUrl: url\n        defaultImage: image\n        twitterUsername\n       }\n     }\n   }\n`</span></span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/Facebook.js</span>\n\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span>  <span class=\"token string\">'prop-types'</span>  \n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span>  <span class=\"token string\">'react'</span>  \n<span class=\"token keyword\">import</span> Helmet <span class=\"token keyword\">from</span>  <span class=\"token string\">'react-helmet'</span>  \n  \n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Facebook</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> url<span class=\"token punctuation\">,</span> name<span class=\"token punctuation\">,</span> type<span class=\"token punctuation\">,</span> title<span class=\"token punctuation\">,</span> desc<span class=\"token punctuation\">,</span> image <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Helmet</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token punctuation\">{</span>name <span class=\"token operator\">&amp;&amp;</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:site_name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:url<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>url<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:type<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>type<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:title<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>title<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:description<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>desc<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:image<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>image<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">property</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>og:image:alt<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>desc<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Helmet</span></span><span class=\"token punctuation\">></span></span>  \n<span class=\"token punctuation\">)</span>  \n  \n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Facebook  \n  \nFacebook<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  url<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  type<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  title<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  desc<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  image<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  name<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n<span class=\"token punctuation\">}</span>  \n  \nFacebook<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  type<span class=\"token punctuation\">:</span> <span class=\"token string\">'website'</span><span class=\"token punctuation\">,</span>  \n  name<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>  \n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/Twitter.js</span>\n\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span>  <span class=\"token string\">'prop-types'</span>  \n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span>  <span class=\"token string\">'react'</span>  \n<span class=\"token keyword\">import</span> Helmet <span class=\"token keyword\">from</span>  <span class=\"token string\">'react-helmet'</span>  \n  \n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Twitter</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> type<span class=\"token punctuation\">,</span> username<span class=\"token punctuation\">,</span> title<span class=\"token punctuation\">,</span> desc<span class=\"token punctuation\">,</span> image <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>  \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Helmet</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token punctuation\">{</span>username <span class=\"token operator\">&amp;&amp;</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:creator<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>username<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:card<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>type<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:title<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>title<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:description<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>desc<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:image<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>image<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>twitter:image:alt<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>desc<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Helmet</span></span><span class=\"token punctuation\">></span></span>  \n<span class=\"token punctuation\">)</span>  \n  \n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Twitter  \n  \nTwitter<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  type<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  username<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  title<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  desc<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n  image<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>  \n<span class=\"token punctuation\">}</span>  \n  \nTwitter<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  type<span class=\"token punctuation\">:</span> <span class=\"token string\">'summary_large_image'</span><span class=\"token punctuation\">,</span>  \n  username<span class=\"token punctuation\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>  \n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Dans le fichier <code class=\"language-text\">SEO.js</code>, je récupère toutes les données puis les distribue aux autres composants.\nJe m’explique: grâce à graphQL on récupère d’abord les données du fichier <code class=\"language-text\">gatsby-config.js</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// gatsby-config.js</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  siteMetadata<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>  \n    title<span class=\"token punctuation\">:</span> <span class=\"token string\">'commit42 | Studio de développement Web'</span><span class=\"token punctuation\">,</span>  \n    description<span class=\"token punctuation\">:</span> <span class=\"token string\">'Studio de développement Web à Toulouse - React - Progressive Web Apps - CakePHP'</span><span class=\"token punctuation\">,</span>  \n    url<span class=\"token punctuation\">:</span> <span class=\"token string\">'https://new-site-c42.netlify.com'</span><span class=\"token punctuation\">,</span>  \n    image<span class=\"token punctuation\">:</span> <span class=\"token string\">'/assets/logo.png'</span><span class=\"token punctuation\">,</span>  \n    twitterUsername<span class=\"token punctuation\">:</span> <span class=\"token string\">'@commit42'</span>  \n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>  \n  plugins<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token comment\">// ici vos plugins]  </span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n\n<span class=\"token keyword\">const</span> query <span class=\"token operator\">=</span> graphql<span class=\"token template-string\"><span class=\"token string\">`  \n  query SEO {  \n    site {  \n      siteMetadata {  \n        defaultTitle: title  \n        defaultDescription: description  \n        siteUrl: url  \n        defaultImage: image  \n        twitterUsername  \n       }  \n     }  \n   }  \n`</span></span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Ensuite on passe ces données au composant SEO avec une <code class=\"language-text\">StaticQuery</code> qui permet de récupérer à la fois des données avec GraphQL et les props du composant.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n\n<span class=\"token operator\">&lt;</span>StaticQuery  \n  query<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>query<span class=\"token punctuation\">}</span>  \n  render<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>  \n    site<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>  \n      siteMetadata<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>  \n        defaultTitle<span class=\"token punctuation\">,</span>  \n        defaultDescription<span class=\"token punctuation\">,</span>  \n        siteUrl<span class=\"token punctuation\">,</span>  \n        defaultImage<span class=\"token punctuation\">,</span>  \n        twitterUsername<span class=\"token punctuation\">,</span>  \n      <span class=\"token punctuation\">}</span>  \n    <span class=\"token punctuation\">}</span>  \n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>D’autre part je récupère les propriétés (ou props pour les intimes) qui sont passées au composant SEO.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">SEO</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> title<span class=\"token punctuation\">,</span> description<span class=\"token punctuation\">,</span> image<span class=\"token punctuation\">,</span> pathname<span class=\"token punctuation\">,</span> article <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></code></pre></div>\n<p>On crée ensuite des variable pour afficher soit les props s’il y en a soit les données du <code class=\"language-text\">gatsby-config.js</code> qui sont ici considérées comme les données par défaut (donc à afficher si une page n’a pas de titre, description ou autre).</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n  \n<span class=\"token keyword\">const</span> seo <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  title<span class=\"token punctuation\">:</span> title <span class=\"token operator\">||</span> defaultTitle<span class=\"token punctuation\">,</span>  \n  description<span class=\"token punctuation\">:</span> description <span class=\"token operator\">||</span> defaultDescription<span class=\"token punctuation\">,</span>  \n  image<span class=\"token punctuation\">:</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>siteUrl<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>image <span class=\"token operator\">||</span> defaultImage<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></span><span class=\"token punctuation\">,</span>  \n  url<span class=\"token punctuation\">:</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>siteUrl<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>pathname <span class=\"token operator\">||</span> <span class=\"token string\">'/'</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></span>  \n<span class=\"token punctuation\">}</span>  </code></pre></div>\n<p>Ces variables sont par la suite transmises aux composants Facebook et Twitter comme props pour qu’ils les données chacun de leur côté.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/components/SEO/SEO.js</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Facebook</span></span>  \n  <span class=\"token attr-name\">desc</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">image</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>image<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">type</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>article <span class=\"token operator\">?</span> <span class=\"token string\">'article'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'website'</span><span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">url</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">}</span></span>  \n<span class=\"token punctuation\">/></span></span>  \n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Twitter</span></span>  \n  <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">image</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>image<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">desc</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>seo<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span></span>  \n  <span class=\"token attr-name\">username</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>twitterUsername<span class=\"token punctuation\">}</span></span>  \n<span class=\"token punctuation\">/></span></span></code></pre></div>\n<p>Ici c’est le template pour les articles dans lequel j’importe le composant SEO et lui transmet les informations de la page afin qu’elle puisse être indexée.</p>\n<p>Vu que ce composant sert à construire toutes les pages “articles” je suis certaine que tous mes articles vont être indexés par les moteurs de recherche et vont avoir un aperçu optimisé grâce à Open Graph.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token comment\">// src/templates/blog-post.js</span>\n\n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span>  <span class=\"token string\">\"react\"</span>  \n<span class=\"token keyword\">import</span>  <span class=\"token string\">\"./blog-post.scss\"</span>  \n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Container<span class=\"token punctuation\">,</span> Header <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span>  <span class=\"token string\">'semantic-ui-react'</span>  \n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> graphql <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span>  <span class=\"token string\">\"gatsby\"</span>  \n<span class=\"token keyword\">import</span> <span class=\"token constant\">SEO</span> <span class=\"token keyword\">from</span>  <span class=\"token string\">'../components/SEO/SEO'</span>  \n<span class=\"token keyword\">import</span> Layout <span class=\"token keyword\">from</span>  <span class=\"token string\">'../components/layout'</span>  \n  \n<span class=\"token keyword\">export</span>  <span class=\"token keyword\">default</span>  <span class=\"token keyword\">function</span>  <span class=\"token function\">Template</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> data <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>  \n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> markdownRemark<span class=\"token punctuation\">:</span> post <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> data  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>  \n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Layout</span></span> <span class=\"token attr-name\">isHome</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token boolean\">false</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">SEO</span></span>  \n        <span class=\"token attr-name\">title</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span>frontmatter<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span></span>  \n        <span class=\"token attr-name\">description</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span>excerpt <span class=\"token operator\">||</span> <span class=\"token string\">'nothing here'</span><span class=\"token punctuation\">}</span></span>  \n        <span class=\"token attr-name\">image</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span>frontmatter<span class=\"token punctuation\">.</span>thumbnail<span class=\"token punctuation\">}</span></span>  \n        <span class=\"token attr-name\">pathname</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span>fields<span class=\"token punctuation\">.</span>slug<span class=\"token punctuation\">}</span></span>  \n        <span class=\"token attr-name\">article</span>  \n       <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Container</span></span> <span class=\"token attr-name\">text</span> <span class=\"token attr-name\">style</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> marginTop<span class=\"token punctuation\">:</span> <span class=\"token string\">'5%'</span><span class=\"token punctuation\">,</span> marginBottom<span class=\"token punctuation\">:</span> <span class=\"token string\">'5%'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n         </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Header</span></span> <span class=\"token attr-name\">as</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>h1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>post<span class=\"token punctuation\">.</span>frontmatter<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Header</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n         </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> \n           <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>blog-post-content<span class=\"token punctuation\">\"</span></span>  \n           <span class=\"token attr-name\">dangerouslySetInnerHTML</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> __html<span class=\"token punctuation\">:</span> post<span class=\"token punctuation\">.</span>html <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span>  \n         <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">  \n       </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Container</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">  \n     </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Layout</span></span><span class=\"token punctuation\">></span></span>  \n   <span class=\"token punctuation\">)</span>  \n<span class=\"token punctuation\">}</span>  \n  \n<span class=\"token keyword\">export</span> <span class=\"token keyword\">const</span> pageQuery <span class=\"token operator\">=</span> graphql<span class=\"token template-string\"><span class=\"token string\">`  \n  query BlogPostBySlug($slug: String!) {  \n    markdownRemark(fields: {slug: {eq: $slug}}) {  \n      html  \n      excerpt  \n      fields{  \n        slug  \n      }  \n      frontmatter {  \n        date  \n        title  \n        thumbnail  \n      }  \n    }  \n  }  \n`</span></span></code></pre></div>\n<p>Les “proptypes” utilisées à la fin de chaque composant sont une façon de typer les propriétés, c’est à dire qu’on défini en avance le type de données que doit recevoir chaque variable. Cela rend le débogage plus simple en affichant les erreurs dans la console lorsqu’on utilise le mode développeur du navigateur mais surtout, permet de s’assurer que la donnée passée de composant en composant est bien ce dont on a besoin.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token constant\">SEO</span><span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>  \n  title<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  description<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  image<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  pathname<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>  \n  article<span class=\"token punctuation\">:</span> PropTypes<span class=\"token punctuation\">.</span>bool<span class=\"token punctuation\">,</span>  \n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Sur l’exemple ci dessous le titre s’attend à recevoir une string (une chaîne de caractère), tout comme la description, l’image et le pathname alors que article sera un booléen (true ou false).</p>\n<p>Les proptypes n’ont pas réellement de rapport avec le référencement mais c’est la première fois que j’en utilise donc je trouvais intéressant de les mentionner tout de même.</p>\n<h2>Une démo ?</h2>\n<h4><em>“Dis Eva, est-ce qu’on peut vooooooir ?”</em></h4>\n<p>NON.</p>\n<p>Bon d’accord.</p>\n<p>Voici <a href=\"https://github.com/EvaSpessotto/mvp-commit42\">le repo du MVP</a> et <a href=\"https://mvp-commit42.netlify.com/\">le lien</a> pour la démo (bien que si tout s’est bien passé, vous lisez déjà cet article sur le MVP !).</p>\n<p>NB: Pour les personnes qui liront cet article bien après le mois de mars 2019, vous pourrez voir à quoi ressemblait le MVP au moment où je l’ai fait !</p>\n<h2>Conclusion</h2>\n<p>Le MVP est fin prêt à voir le jour ! Dès la semaine prochaine je vais le mettre en ligne et enfin pouvoir écrire et publier des articles depuis Netlify CMS (j’ai hâte) et arrêter de spammer mes collègues de mails dès que j’envoie quelque chose sur le repo du site (ils ont hâte).</p>\n<h3>Sources</h3>\n<h4>Tutoriel comment faire un blog avec GatsbyJS:</h4>\n<p><a href=\"https://www.gatsbyjs.org/blog/2017-07-19-creating-a-blog-with-gatsby/\">https://www.gatsbyjs.org/blog/2017-07-19-creating-a-blog-with-gatsby/</a></p>\n<h4>Configurer les routes pour les articles</h4>\n<p><a href=\"https://scotch.io/tutorials/zero-to-deploy-a-practical-guide-to-static-sites-with-gatsbyjs#toc-creating-blog-pages\">https://scotch.io/tutorials/zero-to-deploy-a-practical-guide-to-static-sites-with-gatsbyjs#toc-creating-blog-pages</a></p>\n<h4>Faire un composant SEO pour GatsbyJS</h4>\n<p><a href=\"https://www.gatsbyjs.org/docs/add-seo-component/\">https://www.gatsbyjs.org/docs/add-seo-component/</a></p>\n<h4>Faire des composants utilisant Open Graph et Twitter Cards</h4>\n<p><a href=\"https://github.com/LekoArts/gatsby-starter-prismic\">https://github.com/LekoArts/gatsby-starter-prismic</a></p>","excerpt":"Non le MVP n’est pas le Most Valuable Player mais bien le Minimum Viable Project.Cette semaine je me suis attachée à faire une première…","timeToRead":13,"fields":{"slug":"/blog/le-mvp-est-la/"},"frontmatter":{"date":"2019-03-15T08:38:32.079Z","tags":["MVP","Agilité","GatsbyJS"],"title":"Le MVP est là","author":"Eva Spessotto","thumbnail":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsSAAALEgHS3X78AAACmklEQVQoz21Sy27TQBT1RyFB20Riy4oFP8APsOcH2CDBDtg0DlUbKCot4iVBu0BULWpF27SlyktJ3KQPJ2n8GHvs+DGewx0HUSFh6cj3zNx77tw5o925cevwwd0i7t2/mRVuz8q52QIKBcLcHGF2Gv+PX69JirNisYiZmZkjbVEv4+1iSS4tz0Mvl6CXdMI8Si+XCK8oLuUo6QsoLSxD1/Up8pxFQmWao+uyXC5DE1mWCQlkAlKITIo0hQBxpwk5PoDaExnxyRUycxNCCMoVeY50W4BdlalUtSlIKtNGw6E0jC76/b4cDAawrTESyk7sIySjzWmcZhCBSYJfkCYp4jjKm0SDQ8QXm1DaaZxgPB5LrdfroVKpYG1tDc1mE77vQ0oB6kegTJmpAviRj8awjigOc27aHTz7+hjP15+iZu8gFD6Yy6DZtg3XdeE4DizLAmOMuiewAgMW7+YxaGyj18DOwTrMy/NcsHvZwqf9ZWyPPuL97huY7Ay+x6eC/8KBS+KMTQgRxdTMpTXXg8fivLFLnDkMgZcioQNzJ4RH+7ZjQ1OnU2NyzvM/U8k+CV1sg/U/g3khgcO9asLpvobL3Kkgj8HPt+AbH+D4QV6nmmlDMqXdbqNer8tGowHi+UiIziB5HddfRBdZ+8voFsAHLUzMXzmlTwlKzTAMubGxgZWVFbm6uopOp4MkieEFk9wUNQF5jJNhFSfeEQ4GW7AnY5yOanj07iFefH+CffObTERMuUxqQRAgDEMZRRH+xDDp+XT7HdjBCM1WC1ESoVrfQ93aw8/2D5wN+xhZQxz3d9EOqtitbSOIuOQ8yE059TxPvaFMuayMUU6rNfUM1L06ZEzghwjIqNCfkDl018wjHoK7IUIeZcoDqu39Bm1fSKOAjfGqAAAAAElFTkSuQmCC","aspectRatio":1.6501650165016502,"src":"/static/03e1ea9b0b119f65ec968823a5b6540e/c7e19/mvp.png","srcSet":"/static/03e1ea9b0b119f65ec968823a5b6540e/475cb/mvp.png 245w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/0b65f/mvp.png 490w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/c7e19/mvp.png 980w,\n/static/03e1ea9b0b119f65ec968823a5b6540e/e9c7b/mvp.png 1000w","sizes":"(max-width: 980px) 100vw, 980px"}}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/blog/le-mvp-est-la/"}}