[{"data":1,"prerenderedAt":1318},["ShallowReactive",2],{"$fEJu9Lqks6vI8_OhHAyFx6_7c_tuwxOxjm7IP8EYHUnE":3,"$foRzcIGVC4w7CwWsUQ5aKoJ4bomLsjJr32pdwK6d-NFo":1207},[4,199,346,493,639,783,922,1061],{"id":5,"date":6,"date_gmt":7,"guid":8,"modified":10,"modified_gmt":11,"slug":12,"status":13,"type":14,"link":15,"title":16,"content":18,"excerpt":21,"author":23,"featured_media":24,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":28,"categories":29,"tags":31,"class_list":32,"_links":40,"_embedded":85},64,"2026-07-29T10:38:56","2026-07-29T08:38:56",{"rendered":9},"https:\u002F\u002Fcms.lcdev.fr\u002F?p=64","2026-07-29T10:48:39","2026-07-29T08:48:39","site-web-en-belgique-quelle-langue-choisir","publish","post","https:\u002F\u002Fcms.lcdev.fr\u002Fsite-web-en-belgique-quelle-langue-choisir\u002F",{"rendered":17},"Site web en Belgique : quelle langue choisir ? Le guide complet",{"rendered":19,"protected":20},"\n\u003Cdiv class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-3a88641f wp-block-group-is-layout-flex\">\u003Cdiv class=\"wp-block-icon\">\u003Csvg aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewbox=\"0 0 24 24\">\n\t\u003Cpath d=\"M12 15.8c-3.7 0-6.8-3-6.8-6.8s3-6.8 6.8-6.8c3.7 0 6.8 3 6.8 6.8s-3.1 6.8-6.8 6.8zm0-12C9.1 3.8 6.8 6.1 6.8 9s2.4 5.2 5.2 5.2c2.9 0 5.2-2.4 5.2-5.2S14.9 3.8 12 3.8zM8 17.5h8V19H8zM10 20.5h4V22h-4z\" \u002F>\n\u003C\u002Fsvg>\n\u003C\u002Fdiv>\n\n\n\u003Cdiv class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Résumé de l&rsquo;article\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour la majorité des entreprises belges :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>utilisez un domaine \u003Cstrong>.be\u003C\u002Fstrong>\u003C\u002Fli>\n\n\n\n\u003Cli>proposez au minimum une version française et néerlandaise\u003C\u002Fli>\n\n\n\n\u003Cli>ajoutez l&rsquo;allemand uniquement si votre activité le justifie\u003C\u002Fli>\n\n\n\n\u003Cli>utilisez un seul domaine avec des sous-répertoires\u003C\u002Fli>\n\n\n\n\u003Cli>réécrivez réellement votre contenu plutôt que de simplement le traduire\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour aller plus loin, vous pouvez \u003Ca href=\"https:\u002F\u002Fcalendly.com\u002Fcontact-loicchoulet\u002F30min\">prendre rendez-vous\u003C\u002Fa> avec moi pour définir votre stratégie.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La Belgique est un cas presque unique en Europe.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Le pays compte \u003Cstrong>trois langues officielles\u003C\u002Fstrong> : le français, le néerlandais et l&rsquo;allemand. \u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Contrairement à ce que beaucoup imaginent, elles ne sont pas réparties uniformément sur le territoire.\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>la Flandre est majoritairement néerlandophone ;\u003C\u002Fli>\n\n\n\n\u003Cli>la Wallonie est francophone (à l&rsquo;exception de la Communauté germanophone à l&rsquo;est) ;\u003C\u002Fli>\n\n\n\n\u003Cli>Bruxelles-Capitale est officiellement bilingue français \u002F néerlandais.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cette particularité soulève une question dès la création d&rsquo;un site web :\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">Faut-il traduire son site ? Si oui, dans quelles langues ? Et surtout, quelle structure choisir pour éviter de pénaliser son référencement naturel ?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La réponse dépend essentiellement de votre activité.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Tous les sites belges ne doivent pas être multilingues\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Contrairement à une idée reçue, il n&rsquo;est pas toujours nécessaire de proposer les trois langues.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Prenons un exemple concret.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Le cinéma \u003Cstrong>For&amp;Ver\u003C\u002Fstrong> à Mouscron s&rsquo;adresse presque exclusivement à une clientèle francophone. Situé en Wallonie, son marché est local et ses visiteurs parlent français. Traduire tout le site en néerlandais n&rsquo;apporterait probablement aucun retour sur investissement.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">À l&rsquo;inverse, une entreprise qui vend partout en Belgique se priverait d&rsquo;une grande partie de son marché en ne proposant qu&rsquo;une version française.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Avant toute décision technique, posez-vous une seule question :\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Qui sont réellement vos clients ?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Le choix du nom de domaine détermine presque toute votre stratégie\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est probablement la décision la plus importante.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Une fois le domaine choisi, revenir en arrière devient compliqué.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J&rsquo;ai tendance à distinguer quatre situations.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Cas n°1 : une marque belge\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Exemple : une société Belge qui exerce uniquement dans son pays.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je recommande :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>un domaine en \u003Cstrong>.be\u003C\u002Fstrong>\u003C\u002Fli>\n\n\n\n\u003Cli>une version française\u003C\u002Fli>\n\n\n\n\u003Cli>une version néerlandaise\u003C\u002Fli>\n\n\n\n\u003Cli>une version allemande si le marché le justifie\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Le .be renforce immédiatement l&rsquo;identité belge de la marque.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Cas n°2 : une marque internationale\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si votre société est présente dans plusieurs pays, mieux vaut généralement conserver votre domaine principal en \u003Cstrong>.com\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La Belgique devient alors simplement un marché parmi d&rsquo;autres.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans ce cas :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>domaine principal en .com ou en .eu\u003C\u002Fli>\n\n\n\n\u003Cli>versions FR et NL au minimum\u003C\u002Fli>\n\n\n\n\u003Cli>DE selon le secteur\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Cas n°3 : une marque internationale avec une offre spécifique pour la Belgique\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Certaines entreprises possèdent un site mondial mais créent une déclinaison belge.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est notamment le cas d&rsquo;Intermarché qui possède un \u003Cstrong>intermarche.be\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans cette configuration, un domaine .be est parfaitement cohérent puisque cette variante cible exclusivement le marché belge.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Cas n°4 : vous utilisez un EMD (Exact Match Domain)\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est probablement le seul cas où je recommande deux domaines distincts.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour rappel, un EMD est un nom de domaine construit à partir de mots-clés directement liés à la thématique principale du site web\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Prenons un cas d&rsquo;école. La société AutoHero et ses sites de rachat de voiture.\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>vendezvotrevoiture.be\u003C\u002Fli>\n\n\n\n\u003Cli>wijkopenautos.be\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Les internautes francophones recherchent naturellement la première expression.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Les Flamands recherchent la seconde.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans cette situation, disposer de deux EMD permet d&rsquo;avoir un domaine parfaitement adapté à chaque langue.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Chaque site possède alors :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>son propre contenu ;\u003C\u002Fli>\n\n\n\n\u003Cli>son propre référencement ;\u003C\u002Fli>\n\n\n\n\u003Cli>son propre marché.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Gérer les langues\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hormis cas spécifique comme on vient de le voir, vous aurez 1 seul nom de domaine, en .be, .com ou .eu.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est aujourd&rsquo;hui le cas le plus fréquent.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je recommande généralement une structure du type :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>monsite.be\u002F\nmonsite.be\u002Ffr\u002F\nmonsite.be\u002Fnl\u002F\nmonsite.be\u002Fde\u002F\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Elle présente plusieurs avantages :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>une seule autorité SEO ;\u003C\u002Fli>\n\n\n\n\u003Cli>une maintenance simplifiée ;\u003C\u002Fli>\n\n\n\n\u003Cli>une seule stratégie de netlinking ;\u003C\u002Fli>\n\n\n\n\u003Cli>une implémentation plus simple des balises \u003Ccode>hreflang\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est également la structure recommandée dans la majorité des projets SEO multilingues.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Ne traduisez pas seulement vos textes\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est une erreur que je rencontre régulièrement.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Un bon site belge ne consiste pas à passer les contenus dans DeepL.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Chaque langue possède ses propres recherches Google.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Par conséquent :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>les URL doivent être traduites ;\u003C\u002Fli>\n\n\n\n\u003Cli>les balises Title et Meta Description doivent être réécrites ;\u003C\u002Fli>\n\n\n\n\u003Cli>les mots-clés doivent faire l&rsquo;objet d&rsquo;une recherche spécifique dans chaque langue.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Un Flamand ne recherche pas toujours la traduction exacte de ce qu&rsquo;un Wallon tape dans Google. Une traduction littérale fait souvent perdre des opportunités SEO.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003C\u002Fp>\n",false,{"rendered":22,"protected":20},"\u003Cp>La Belgique est un marché unique où cohabitent trois langues officielles. Faut-il créer un site en français, en néerlandais, en allemand, ou dans les trois ? Quel nom de domaine choisir pour optimiser son référencement ? Découvrez les bonnes pratiques pour construire une stratégie multilingue efficace, pensée à la fois pour vos visiteurs et pour le SEO.\u003C\u002Fp>\n",1,70,"open","","standard",{"footnotes":26},[30],8,[],[33,14,34,35,36,37,38,39],"post-64","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo",{"self":41,"collection":47,"about":50,"author":53,"replies":57,"version-history":60,"predecessor-version":64,"wp:featuredmedia":68,"wp:attachment":71,"wp:term":74,"curies":81},[42],{"href":43,"targetHints":44},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F64",{"allow":45},[46],"GET",[48],{"href":49},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts",[51],{"href":52},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftypes\u002Fpost",[54],{"embeddable":55,"href":56},true,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fusers\u002F1",[58],{"embeddable":55,"href":59},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=64",[61],{"count":62,"href":63},10,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F64\u002Frevisions",[65],{"id":66,"href":67},77,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F64\u002Frevisions\u002F77",[69],{"embeddable":55,"href":70},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F70",[72],{"href":73},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=64",[75,78],{"taxonomy":76,"embeddable":55,"href":77},"category","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=64",{"taxonomy":79,"embeddable":55,"href":80},"post_tag","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=64",[82],{"name":83,"href":84,"templated":55},"wp","https:\u002F\u002Fapi.w.org\u002F{rel}",{"author":86,"wp:featuredmedia":103,"wp:term":175},[87],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":91,"_links":95},"lcdev","http:\u002F\u002Fcms.lcdev.fr","https:\u002F\u002Fcms.lcdev.fr\u002Fauthor\u002Flcdev\u002F",{"24":92,"48":93,"96":94},"https:\u002F\u002Fsecure.gravatar.com\u002Favatar\u002F8578aee4d4c25728b0f2cb389c2c80a414b27a57d2a499ce695a879ec3e1fd97?s=24&d=mm&r=g","https:\u002F\u002Fsecure.gravatar.com\u002Favatar\u002F8578aee4d4c25728b0f2cb389c2c80a414b27a57d2a499ce695a879ec3e1fd97?s=48&d=mm&r=g","https:\u002F\u002Fsecure.gravatar.com\u002Favatar\u002F8578aee4d4c25728b0f2cb389c2c80a414b27a57d2a499ce695a879ec3e1fd97?s=96&d=mm&r=g",{"self":96,"collection":100},[97],{"href":56,"targetHints":98},{"allow":99},[46],[101],{"href":102},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fusers",[104],{"id":24,"date":105,"slug":106,"type":107,"link":108,"title":109,"author":23,"featured_media":110,"caption":111,"alt_text":26,"media_type":112,"mime_type":113,"media_details":114,"source_url":151,"_links":155},"2026-07-29T10:38:08","site-web-belgique-quelle-langue-choisir","attachment","https:\u002F\u002Fcms.lcdev.fr\u002Fsite-web-en-belgique-quelle-langue-choisir\u002Fsite-web-belgique-quelle-langue-choisir\u002F",{"rendered":106},0,{"rendered":26},"image","image\u002Fpng",{"width":115,"height":116,"file":117,"filesize":118,"sizes":119,"image_meta":152},1920,1080,"2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir.png",81854,{"medium":120,"large":126,"thumbnail":132,"medium_large":137,"1536x1536":143,"full":149},{"file":121,"width":122,"height":123,"filesize":124,"mime_type":113,"source_url":125},"site-web-belgique-quelle-langue-choisir-300x169.png",300,169,11794,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir-300x169.png",{"file":127,"width":128,"height":129,"filesize":130,"mime_type":113,"source_url":131},"site-web-belgique-quelle-langue-choisir-1024x576.png",1024,576,49546,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir-1024x576.png",{"file":133,"width":134,"height":134,"filesize":135,"mime_type":113,"source_url":136},"site-web-belgique-quelle-langue-choisir-150x150.png",150,9229,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir-150x150.png",{"file":138,"width":139,"height":140,"filesize":141,"mime_type":113,"source_url":142},"site-web-belgique-quelle-langue-choisir-768x432.png",768,432,36035,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir-768x432.png",{"file":144,"width":145,"height":146,"filesize":147,"mime_type":113,"source_url":148},"site-web-belgique-quelle-langue-choisir-1536x864.png",1536,864,80282,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir-1536x864.png",{"file":150,"width":115,"height":116,"mime_type":113,"source_url":151},"site-web-belgique-quelle-langue-choisir.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fsite-web-belgique-quelle-langue-choisir.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":154,"alt":26},"0",[],{"self":156,"collection":160,"about":163,"author":166,"replies":168,"wp:attached-to":171,"curies":173},[157],{"href":70,"targetHints":158},{"allow":159},[46],[161],{"href":162},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia",[164],{"href":165},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftypes\u002Fattachment",[167],{"embeddable":55,"href":56},[169],{"embeddable":55,"href":170},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=70",[172],{"embeddable":55,"post_type":14,"id":5,"href":43},[174],{"name":83,"href":84,"templated":55},[176,198],[177],{"id":30,"link":178,"name":179,"slug":180,"taxonomy":76,"_links":181},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Fseo\u002F","SEO","seo",{"self":182,"collection":187,"about":190,"wp:post_type":193,"curies":196},[183],{"href":184,"targetHints":185},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F8",{"allow":186},[46],[188],{"href":189},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories",[191],{"href":192},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftaxonomies\u002Fcategory",[194],{"href":195},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=8",[197],{"name":83,"href":84,"templated":55},[],{"id":200,"date":201,"date_gmt":202,"guid":203,"modified":205,"modified_gmt":206,"slug":207,"status":13,"type":14,"link":208,"title":209,"content":211,"excerpt":213,"author":23,"featured_media":215,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":216,"categories":217,"tags":219,"class_list":220,"_links":223,"_embedded":259},40,"2026-07-08T15:11:01","2026-07-08T13:11:01",{"rendered":204},"https:\u002F\u002Fcms.lcdev.fr\u002F?p=40","2026-07-08T16:28:02","2026-07-08T14:28:02","creer-une-fiche-google-my-business-complete-en-10-minutes","https:\u002F\u002Fcms.lcdev.fr\u002Fcreer-une-fiche-google-my-business-complete-en-10-minutes\u002F",{"rendered":210},"Créer une fiche Google My Business complète en 10 minutes",{"rendered":212,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>46 % des recherches effectuées sur Google ont une intention locale.\u003C\u002Fstrong> Autrement dit, près d&rsquo;une recherche sur deux concerne un commerce, un service ou un professionnel situé à proximité.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous venez de lancer votre activité et que vous ne possédez pas encore de fiche Google Business Profile (anciennement Google My Business), c&rsquo;est probablement \u003Cstrong>le levier le plus rapide et le plus efficace pour gagner en visibilité\u003C\u002Fstrong>, parfois même avant la \u003Ca href=\"https:\u002F\u002Flcdev.fr\u002Fcreation-site-internet\u002F\">création d&rsquo;un site internet\u003C\u002Fa>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans ce guide, je vous montre comment créer une fiche Google My Business \u003Cstrong>complète\u003C\u002Fstrong> en une dizaine de minutes.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Les bénéfices d&rsquo;une fiche Google My Business\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Créer une fiche Google My Business est totalement gratuit.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">En quelques minutes, votre établissement peut apparaître sur Google Maps ainsi que dans les résultats de recherche locaux. \u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Par exemple, lorsqu&rsquo;un internaute recherche \u003Cstrong>« restaurant Annecy »\u003C\u002Fstrong>, \u003Cstrong>« hôtel Chamonix »\u003C\u002Fstrong> ou \u003Cstrong>« coiffeur Saint Julien en Genevois »\u003C\u002Fstrong>, Google affiche en priorité une carte accompagnée d&rsquo;une sélection d&rsquo;établissements.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous avez probablement déjà rencontré ce type de résultat lors de vos recherches.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-large\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"1024\" src=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgoogle-mobile-restaurant-annecy-629x1024.png\" alt=\"\" class=\"wp-image-41\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgoogle-mobile-restaurant-annecy-629x1024.png 629w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgoogle-mobile-restaurant-annecy-184x300.png 184w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgoogle-mobile-restaurant-annecy.png 750w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Être présent dans cette sélection est devenu indispensable. Les résultats affichés dans le \u003Cstrong>Google Local Pack\u003C\u002Fstrong> captent \u003Cstrong>42 % des clics\u003C\u002Fstrong> lors d&rsquo;une recherche locale. Autrement dit, près d&rsquo;un clic sur deux est effectué directement sur une fiche Google Business Profile plutôt que sur un résultat de recherche classique.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">En plus de cela, une fiche bien renseignée permet de rassurer immédiatement vos futurs clients grâce à vos horaires, vos avis, vos photos et vos coordonnées.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Créer sa fiche d&rsquo;établissement\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour référencer votre établissement auprès de Google, vous aurez besoin d&rsquo;un compte sur célèbre le moteur de recherche.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pas de panique si vous n&rsquo;en possédez pas, vous pourrez en créé un le moment voulu.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Commencez par vous rendre sur la page des fiches d&rsquo;établissements : \u003Ca href=\"https:\u002F\u002Fbusiness.google.com\u002Ffr\u002Fbusiness-profile\u002F\">https:\u002F\u002Fbusiness.google.com\u002Ffr\u002Fbusiness-profile\u002F\u003C\u002Fa>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cliquez ensuite sur  le bouton « Continuer » en haut à droite.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est le moment de se connecter à votre compte Google ou d&rsquo;en créer un gratuitement. \u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez alors commencer le processus de création de fiche.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">1. Choisir la bonne catégorie\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La première étape consiste à renseigner le nom de votre entreprise.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cela paraît simple, mais Google impose quelques règles. Le nom doit correspondre au nom réel de votre entreprise et ne doit pas être optimisé avec des mots-clés.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">❌ \u003Cstrong>Interdit :\u003C\u002Fstrong> \u003Cem>Pizzeria La Belle Pizza\u003C\u002Fem>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">✅ \u003Cstrong>Autorisé :\u003C\u002Fstrong> \u003Cem>La Belle Pizza\u003C\u002Fem>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Même si certains établissements le font encore, ajouter votre activité ou votre ville dans le nom est contraire aux règles de Google et peut entraîner une suspension de votre fiche.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Catégorie d&rsquo;activité\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google vous demande ensuite de choisir une catégorie principale.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est l&rsquo;un des critères les plus importants pour votre référencement local. Elle permet à Google de comprendre précisément votre activité et de déterminer sur quelles recherches afficher votre établissement.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Choisissez la catégorie la plus représentative de votre activité principale. Vous pourrez ensuite compléter votre fiche avec plusieurs catégories secondaires.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Par exemple :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Restaurant italien\u003C\u002Fli>\n\n\n\n\u003Cli>Plombier\u003C\u002Fli>\n\n\n\n\u003Cli>Agence immobilière\u003C\u002Fli>\n\n\n\n\u003Cli>Consultant informatique\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ne choisissez pas une catégorie simplement parce qu&rsquo;elle semble plus populaire : privilégiez toujours celle qui correspond réellement à votre activité.une catégorie uniquement parce qu&rsquo;elle semble plus populaire.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"490\" height=\"502\" src=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fimage-1.png\" alt=\"\" class=\"wp-image-43\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fimage-1.png 490w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fimage-1-293x300.png 293w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">2. Le lieu\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google vous demande ensuite si les clients peuvent se rendre dans votre établissement.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous accueillez du public (boutique, restaurant, cabinet, salon&#8230;), répondez \u003Cstrong>Oui\u003C\u002Fstrong>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Votre établissement pourra ainsi apparaître directement sur Google Maps.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous exercez uniquement à domicile ou chez vos clients, répondez \u003Cstrong>Non\u003C\u002Fstrong>. Vous pourrez renseigner votre zone d&rsquo;intervention à l&rsquo;étape suivante.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">3. L&rsquo;adresse\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Saisissez ensuite l&rsquo;adresse complète de votre établissement.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Veillez à ce qu&rsquo;elle soit parfaitement exacte. Cette adresse sera utilisée par Google Maps pour guider vos futurs clients et permettra également à Google de vous positionner sur les recherches locales.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">4. S&rsquo;agit-il de votre établissement&nbsp;?\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google cherche ensuite à éviter les doublons.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">À partir de votre nom et de votre adresse, il affiche les établissements déjà présents à proximité afin de vérifier qu&rsquo;une fiche n&rsquo;existe pas déjà.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans la majorité des cas, votre entreprise n&rsquo;apparaît pas dans cette liste. Vous pouvez alors sélectionner \u003Cstrong>Aucun de ceux-ci\u003C\u002Fstrong> et poursuivre la création.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-3a88641f wp-block-group-is-layout-flex\">\u003Cdiv class=\"wp-block-icon\">\u003Csvg aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewbox=\"0 0 24 24\">\n\t\u003Cpath d=\"M12 4a8 8 0 1 1 .001 16.001A8 8 0 0 1 12 4Zm0 1.5a6.5 6.5 0 1 0-.001 13.001A6.5 6.5 0 0 0 12 5.5Zm.75 11h-1.5V15h1.5v1.5Zm-.445-9.234a3 3 0 0 1 .445 5.89V14h-1.5v-1.25c0-.57.452-.958.917-1.01A1.5 1.5 0 0 0 12 8.75a1.5 1.5 0 0 0-1.5 1.5H9a3 3 0 0 1 3.305-2.984Z\" \u002F>\n\u003C\u002Fsvg>\n\u003C\u002Fdiv>\n\n\n\u003Cdiv class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Et si ma fiche est déjà présente ?\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pas d&rsquo;inquiétude.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il est fréquent qu&rsquo;une fiche existe déjà sans que vous l&rsquo;ayez créée. Google peut en effet générer automatiquement certains établissements à partir de différentes sources, ou un utilisateur peut avoir ajouté votre entreprise pour enrichir Google Maps.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans ce cas, sélectionnez simplement votre établissement et demandez à en récupérer la propriété. Google vous guidera ensuite dans la procédure de validation.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il est inutile de créer une seconde fiche. En plus de créer de la confusion pour vos clients, cela est contraire aux règles de Google et peut entraîner la suppression des deux fiches.  \u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">5. Services à domicile\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google vous demande ensuite si vous proposez des services à domicile ou de la livraison.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Répondez \u003Cstrong>Oui\u003C\u002Fstrong> si vous intervenez directement chez vos clients (plombier, électricien, jardinier, consultant&#8230;) ou si vous livrez vos produits (restaurant, fleuriste, etc.).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous devrez ensuite définir votre zone d&rsquo;intervention.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ajoutez les villes dans lesquelles vous intervenez. Pour les grandes agglomérations, vous pouvez également préciser certains arrondissements afin d&rsquo;être plus précis.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">6. Coordonnées \u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez maintenant renseigner vos coordonnées.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je vous conseille d&rsquo;ajouter au minimum :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>votre numéro de téléphone ;\u003C\u002Fli>\n\n\n\n\u003Cli>votre site internet si vous en possédez un.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous ne possédez pas de site internet ? Faite appel à mon service de \u003Ca href=\"https:\u002F\u002Flcdev.fr\u002Fcreation-site-internet\u002F\">création de site Web\u003C\u002Fa>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google permet également d&rsquo;ajouter une option de contact par SMS ou via WhatsApp pour certaines activités. Si cette fonctionnalité est proposée et que vous êtes en mesure de répondre rapidement, cela peut faciliter la prise de contact avec vos futurs clients.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">7. Validation de l&rsquo;établissement\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est généralement l&rsquo;étape la plus redoutée, mais elle est indispensable.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google doit vérifier que vous êtes bien le propriétaire ou le gestionnaire de l&rsquo;établissement avant de rendre votre fiche visible.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La méthode de validation est choisie automatiquement par Google et varie selon votre activité.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pourrez notamment être amené à effectuer une validation par :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>enregistrement vidéo ;\u003C\u002Fli>\n\n\n\n\u003Cli>appel vidéo en direct ;\u003C\u002Fli>\n\n\n\n\u003Cli>téléphone ou SMS ;\u003C\u002Fli>\n\n\n\n\u003Cli>e-mail ;\u003C\u002Fli>\n\n\n\n\u003Cli>courrier postal (plus rare aujourd&rsquo;hui).\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cette procédure permet de limiter les fraudes et d&#8217;empêcher qu&rsquo;une personne crée une fiche pour une entreprise qui ne lui appartient pas.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez choisir de valider votre établissement plus tard, mais tant que cette étape n&rsquo;est pas réalisée, votre fiche restera invisible dans les résultats de recherche.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Des informations complémentaires\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Votre fiche est désormais créée. Elle va commencer à être visible (sous réserve de validation).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Toutefois, Google continue de vous proposer plusieurs étapes afin de compléter votre profil. Je vous recommande vivement de les renseigner : une \u003Cstrong>fiche complète\u003C\u002Fstrong> inspire davantage confiance aux internautes et a plus de chances d&rsquo;apparaître dans les résultats locaux.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Les horaires\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Renseignez vos horaires d&rsquo;ouverture avec précision.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-3a88641f wp-block-group-is-layout-flex\">\u003Cdiv class=\"wp-block-icon\">\u003Csvg aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewbox=\"0 0 24 24\">\n\t\u003Cpath d=\"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z\" \u002F>\n\u003C\u002Fsvg>\n\u003C\u002Fdiv>\n\n\n\u003Cdiv class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Pour plus tard \u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">N&rsquo;oubliez pas de mettre à jour vos horaires exceptionnels lors des jours fériés ou des périodes de fermeture. Rien n&rsquo;est plus frustrant pour un client que de se déplacer devant un établissement fermé alors que Google indiquait le contraire.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Les attributs de l&rsquo;établissement\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google propose ensuite des informations spécifiques à votre activité.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour une pizzeria par exemple, vous pourrez indiquer :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Repas sur place ;\u003C\u002Fli>\n\n\n\n\u003Cli>À emporter ;\u003C\u002Fli>\n\n\n\n\u003Cli>Livraison ;\u003C\u002Fli>\n\n\n\n\u003Cli>Drive disponible.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Selon votre métier, les attributs seront différents (parking, accès PMR, Wi-Fi, terrasse, devis gratuit, etc.).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Prenez quelques minutes pour les compléter : ces informations sont souvent utilisées comme filtres dans les recherches.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">La description\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous disposez de \u003Cstrong>750 caractères\u003C\u002Fstrong> pour présenter votre entreprise.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ne cherchez pas à répéter des dizaines de mots-clés. Décrivez simplement votre activité en répondant à quelques questions :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Que faites-vous ?\u003C\u002Fli>\n\n\n\n\u003Cli>Depuis quand existe votre entreprise ?\u003C\u002Fli>\n\n\n\n\u003Cli>Quelle est votre spécialité ?\u003C\u002Fli>\n\n\n\n\u003Cli>Qu&rsquo;est-ce qui vous différencie de vos concurrents ?\u003C\u002Fli>\n\n\n\n\u003Cli>Sur quel secteur géographique intervenez-vous ?\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">L&rsquo;objectif est de rassurer vos futurs clients, pas de convaincre Google avec une liste de mots-clés.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Photos de vitrine\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">C&rsquo;est probablement l&rsquo;étape la plus importante après les avis.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Commencez par ajouter une photo de votre façade ou de votre vitrine. Elle doit être bien cadré, lumineuse et donner envie.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sans cela, Google affichera une image issue de Street View, souvent ancienne ou peu valorisante.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous êtes restaurateur, ajoutez également des photos de vos plats, de votre menu et de votre salle. Des photos professionnelles ou simplement bien éclairées donnent immédiatement une meilleure image de votre établissement et augmentent le nombre de clics sur votre fiche.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Google Workspace\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Google vous proposera enfin de souscrire à Google Workspace afin d&rsquo;obtenir une adresse e-mail professionnelle et d&rsquo;autres services.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous savez précisément pourquoi vous en avez besoin, libre à vous de poursuivre.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans le cas contraire, vous pouvez simplement cliquer sur \u003Cstrong>Ignorer\u003C\u002Fstrong>. Cette étape n&rsquo;a aucun impact sur votre référencement local ni sur la visibilité de votre fiche.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Votre fiche est créée… mais le travail ne fait que commencer\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Votre fiche Google My Business est désormais opérationnelle.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour obtenir de bons résultats sur le long terme, pensez à la faire vivre. Répondez aux avis, ajoutez régulièrement de nouvelles photos, mettez à jour vos horaires et publiez de temps en temps une actualité ou une offre.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Une fiche active inspire davantage confiance aux internautes et envoie également un signal positif à Google. Ce sont souvent ces petits détails qui font la différence face à vos concurrents.\u003C\u002Fp>\n",{"rendered":214,"protected":20},"\u003Cp>Google My Business est probablement le levier le plus rapide et le plus efficace pour gagner en visibilité locale. Découvrez comment créer une fiche complète en 10 minutes chrono.\u003C\u002Fp>\n",50,{"footnotes":26},[218],5,[],[221,14,34,35,36,37,38,222],"post-40","category-referencement-local",{"self":224,"collection":229,"about":231,"author":233,"replies":235,"version-history":238,"predecessor-version":242,"wp:featuredmedia":246,"wp:attachment":249,"wp:term":252,"curies":257},[225],{"href":226,"targetHints":227},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F40",{"allow":228},[46],[230],{"href":49},[232],{"href":52},[234],{"embeddable":55,"href":56},[236],{"embeddable":55,"href":237},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=40",[239],{"count":240,"href":241},9,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F40\u002Frevisions",[243],{"id":244,"href":245},54,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F40\u002Frevisions\u002F54",[247],{"embeddable":55,"href":248},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F50",[250],{"href":251},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=40",[253,255],{"taxonomy":76,"embeddable":55,"href":254},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=40",{"taxonomy":79,"embeddable":55,"href":256},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=40",[258],{"name":83,"href":84,"templated":55},{"author":260,"wp:featuredmedia":270,"wp:term":324},[261],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":262,"_links":263},{"24":92,"48":93,"96":94},{"self":264,"collection":268},[265],{"href":56,"targetHints":266},{"allow":267},[46],[269],{"href":102},[271],{"id":215,"date":272,"slug":273,"type":107,"link":274,"title":275,"author":23,"featured_media":110,"caption":276,"alt_text":26,"media_type":112,"mime_type":113,"media_details":277,"source_url":303,"_links":306},"2026-07-08T15:15:40","creer-fiche-google-my-business","https:\u002F\u002Fcms.lcdev.fr\u002Fcreer-une-fiche-google-my-business-complete-en-10-minutes\u002Fcreer-fiche-google-my-business\u002F",{"rendered":273},{"rendered":26},{"width":115,"height":116,"file":278,"filesize":279,"sizes":280,"image_meta":304},"2026\u002F07\u002Fcreer-fiche-google-my-business.png",93971,{"medium":281,"large":285,"thumbnail":289,"medium_large":293,"1536x1536":297,"full":301},{"file":282,"width":122,"height":123,"filesize":283,"mime_type":113,"source_url":284},"creer-fiche-google-my-business-300x169.png",16333,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business-300x169.png",{"file":286,"width":128,"height":129,"filesize":287,"mime_type":113,"source_url":288},"creer-fiche-google-my-business-1024x576.png",66835,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business-1024x576.png",{"file":290,"width":134,"height":134,"filesize":291,"mime_type":113,"source_url":292},"creer-fiche-google-my-business-150x150.png",12162,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business-150x150.png",{"file":294,"width":139,"height":140,"filesize":295,"mime_type":113,"source_url":296},"creer-fiche-google-my-business-768x432.png",47811,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business-768x432.png",{"file":298,"width":145,"height":146,"filesize":299,"mime_type":113,"source_url":300},"creer-fiche-google-my-business-1536x864.png",100736,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business-1536x864.png",{"file":302,"width":115,"height":116,"mime_type":113,"source_url":303},"creer-fiche-google-my-business.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcreer-fiche-google-my-business.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":305,"alt":26},[],{"self":307,"collection":311,"about":313,"author":315,"replies":317,"wp:attached-to":320,"curies":322},[308],{"href":248,"targetHints":309},{"allow":310},[46],[312],{"href":162},[314],{"href":165},[316],{"embeddable":55,"href":56},[318],{"embeddable":55,"href":319},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=50",[321],{"embeddable":55,"post_type":14,"id":200,"href":226},[323],{"name":83,"href":84,"templated":55},[325,345],[326],{"id":218,"link":327,"name":328,"slug":329,"taxonomy":76,"_links":330},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Freferencement-local\u002F","Référencement local","referencement-local",{"self":331,"collection":336,"about":338,"wp:post_type":340,"curies":343},[332],{"href":333,"targetHints":334},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F5",{"allow":335},[46],[337],{"href":189},[339],{"href":192},[341],{"href":342},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=5",[344],{"name":83,"href":84,"templated":55},[],{"id":347,"date":348,"date_gmt":349,"guid":350,"modified":352,"modified_gmt":353,"slug":354,"status":13,"type":14,"link":355,"title":356,"content":358,"excerpt":360,"author":23,"featured_media":362,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":363,"categories":364,"tags":366,"class_list":367,"_links":370,"_embedded":405},57,"2023-02-15T11:30:00","2023-02-15T10:30:00",{"rendered":351},"https:\u002F\u002Fcms.lcdev.fr\u002F?p=57","2026-07-08T16:39:28","2026-07-08T14:39:28","php-generer-des-avatars-a-partir-des-intiales-de-vos-utilisateurs","https:\u002F\u002Fcms.lcdev.fr\u002Fphp-generer-des-avatars-a-partir-des-intiales-de-vos-utilisateurs\u002F",{"rendered":357},"PHP : générer des avatars à partir des initiales de vos utilisateurs",{"rendered":359,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">Vous avez forcément déjà dû rencontrer l&rsquo;un de ces avatars ! Google, Microsoft et bon nombre d&rsquo;acteurs du Web vous assignent par défaut cette image qui reprend la première lettre de votre prénom et de votre nom.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous voulez à votre tour générer ce genre d&rsquo;image dans votre application PHP ? Alors suivez le guide, ça ne vous prendra que quelques minutes.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Choix de la librairie\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour générer les avatars basés sur des initiales, je vous propose de déléguer la tâche à une librairie disponible sur Packagist.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je vous en recommande deux qui font parfaitement le travail :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FLasseRafn\u002Fphp-initial-avatar-generator\">LasseRafn\u002Fphp-initial-avatar-generator\u003C\u002Fa>\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fyohangdev\u002Fletter-avatar\">yohangdev\u002Fletter-avatar\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je vous propose de découvrir la première, plus complète.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Générer un avatar personnalisé\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Comme vous vous en doutez sûrement, il faut commencer par installer la librairie à l&rsquo;aide de Composer.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>composer require \u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Une fois installé, vous êtes prêt à générer des avatars ! Il vous suffit d&rsquo;instancier la classe \u003Ccode>InitialAvatar\u003C\u002Fcode>, de fournir un nom et de générer l&rsquo;image.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>use LasseRafn\\InitialAvatarGenerator\\InitialAvatar;\u003Cbr>​\u003Cbr>$avatar = new InitialAvatar();\u003Cbr>$image = $avatar-&gt;name(\"LC Dev\")-&gt;generate();\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Un avatar avec les lettres « LD » sera généré. Il ne reste plus qu&rsquo;à l&rsquo;enregistrer là où bon vous semble.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>$image-&gt;save(\"\u002F\");\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Aller plus loin en personnalisant l&rsquo;image\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Cette librairie à l&rsquo;avantage de proposer un lot de personnalisation.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez par exemple définir la couleur du fond, la couleur des lettres et bien plus encore.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>$image = $avatar-&gt;name(\"LC Dev\")\u003Cbr>    -&gt;background('#0b3155')\u003Cbr>    -&gt;color('#d05d28')\u003Cbr>    -&gt;generate();\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour plus de personnalisation, vous pouvez consulter la \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FLasseRafn\u002Fphp-initial-avatar-generator\">documentation disponible sur GitHub\u003C\u002Fa>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bonne génération d&rsquo;avatar et n&rsquo;hésitez pas à laisser un commentaire si besoin.\u003C\u002Fp>\n",{"rendered":361,"protected":20},"\u003Cp>Google, Microsoft et bon nombre d&rsquo;acteurs du Web vous assignent par défaut cette image qui reprend la première lettre de votre prénom et de votre nom. Générez à votre tour ce genre d&rsquo;avatar en PHP.\u003C\u002Fp>\n",23,{"footnotes":26},[365],6,[],[368,14,34,35,36,37,38,369],"post-57","category-php",{"self":371,"collection":376,"about":378,"author":380,"replies":382,"version-history":385,"predecessor-version":388,"wp:featuredmedia":392,"wp:attachment":395,"wp:term":398,"curies":403},[372],{"href":373,"targetHints":374},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F57",{"allow":375},[46],[377],{"href":49},[379],{"href":52},[381],{"embeddable":55,"href":56},[383],{"embeddable":55,"href":384},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=57",[386],{"count":23,"href":387},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F57\u002Frevisions",[389],{"id":390,"href":391},58,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F57\u002Frevisions\u002F58",[393],{"embeddable":55,"href":394},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F23",[396],{"href":397},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=57",[399,401],{"taxonomy":76,"embeddable":55,"href":400},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=57",{"taxonomy":79,"embeddable":55,"href":402},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=57",[404],{"name":83,"href":84,"templated":55},{"author":406,"wp:featuredmedia":416,"wp:term":471},[407],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":408,"_links":409},{"24":92,"48":93,"96":94},{"self":410,"collection":414},[411],{"href":56,"targetHints":412},{"allow":413},[46],[415],{"href":102},[417],{"id":362,"date":418,"slug":419,"type":107,"link":420,"title":421,"author":23,"featured_media":110,"caption":422,"alt_text":26,"media_type":112,"mime_type":113,"media_details":423,"source_url":449,"_links":452},"2026-07-06T15:26:48","php-generer-avatar-lettres","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Fphp-generer-avatar-lettres\u002F",{"rendered":419},{"rendered":26},{"width":115,"height":116,"file":424,"filesize":425,"sizes":426,"image_meta":450},"2026\u002F07\u002Fphp-generer-avatar-lettres.png",111878,{"medium":427,"large":431,"thumbnail":435,"medium_large":439,"1536x1536":443,"full":447},{"file":428,"width":122,"height":123,"filesize":429,"mime_type":113,"source_url":430},"php-generer-avatar-lettres-300x169.png",13727,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres-300x169.png",{"file":432,"width":128,"height":129,"filesize":433,"mime_type":113,"source_url":434},"php-generer-avatar-lettres-1024x576.png",64088,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres-1024x576.png",{"file":436,"width":134,"height":134,"filesize":437,"mime_type":113,"source_url":438},"php-generer-avatar-lettres-150x150.png",9986,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres-150x150.png",{"file":440,"width":139,"height":140,"filesize":441,"mime_type":113,"source_url":442},"php-generer-avatar-lettres-768x432.png",44701,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres-768x432.png",{"file":444,"width":145,"height":146,"filesize":445,"mime_type":113,"source_url":446},"php-generer-avatar-lettres-1536x864.png",105708,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres-1536x864.png",{"file":448,"width":115,"height":116,"mime_type":113,"source_url":449},"php-generer-avatar-lettres.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fphp-generer-avatar-lettres.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":451,"alt":26},[],{"self":453,"collection":457,"about":459,"author":461,"replies":463,"wp:attached-to":466,"curies":469},[454],{"href":394,"targetHints":455},{"allow":456},[46],[458],{"href":162},[460],{"href":165},[462],{"embeddable":55,"href":56},[464],{"embeddable":55,"href":465},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=23",[467],{"embeddable":55,"post_type":14,"id":30,"href":468},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F8",[470],{"name":83,"href":84,"templated":55},[472,492],[473],{"id":365,"link":474,"name":475,"slug":476,"taxonomy":76,"_links":477},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Fphp\u002F","PHP","php",{"self":478,"collection":483,"about":485,"wp:post_type":487,"curies":490},[479],{"href":480,"targetHints":481},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F6",{"allow":482},[46],[484],{"href":189},[486],{"href":192},[488],{"href":489},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=6",[491],{"name":83,"href":84,"templated":55},[],{"id":494,"date":495,"date_gmt":496,"guid":497,"modified":499,"modified_gmt":500,"slug":501,"status":13,"type":14,"link":502,"title":503,"content":505,"excerpt":507,"author":23,"featured_media":509,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":510,"categories":511,"tags":513,"class_list":514,"_links":517,"_embedded":552},55,"2022-11-10T10:10:00","2022-11-10T09:10:00",{"rendered":498},"https:\u002F\u002Fcms.lcdev.fr\u002F?p=55","2026-07-08T16:36:47","2026-07-08T14:36:47","ma-methode-pour-generer-un-sitemap-sur-laravel","https:\u002F\u002Fcms.lcdev.fr\u002Fma-methode-pour-generer-un-sitemap-sur-laravel\u002F",{"rendered":504},"Ma méthode pour générer un sitemap sur Laravel",{"rendered":506,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">Un sitemap est un fichier au format XML, RSS ou TXT qui recense les pages web d&rsquo;un site. Les moteurs de recherche utilisent ce fichier pour parcourir un site de manière plus efficace. Des informations complémentaires comme la date de mise à jour d&rsquo;une page peuvent être indiquées, pour « recommander » aux moteurs de recherche de retourner explorer les pages récemment modifiées. Je mets le mot recommandé entre guillemets, car les robots n’en font parfois qu&rsquo;à leur tête. Bien que pas obligatoire pour améliorer son SEO, il est quand même recommandé d&rsquo;avoir un sitemap pour guider les robots de crawl.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans cet article, je vous propose de découvrir ma méthode pour générer un sitemap sur Laravel.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Est-ce la meilleure méthode pour générer un sitemap sur un projet Laravel ?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Comme souvent en programmation, il existe un tas de solutions pour résoudre une même problématique. Il existe des plugins qui permettent de générer « automatiquement » un sitemap avec un peu de configuration dans les modèles. Je pense notamment au plugin \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fspatie\u002Flaravel-sitemap\">spatie\u002Flaravel-sitemap\u003C\u002Fa>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour ma part, j&rsquo;ai fait le choix de gérer le sitemap plus manuellement, pour garder un maximum de souplesse et pouvoir mixer facilement les pages basées sur un élément en base de données et les pages statiques du projet.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Création d&rsquo;une commande Laravel pour générer un sitemap\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Par définition, un sitemap est amené à évoluer au fil du temps par l&rsquo;ajout, la modification ou encore la suppression de contenu (articles, produits, page, etc.).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il me parait donc judicieux de créer une commande pour cette tâche, qui pourra être lancée à intervalle régulier grâce à la programmation de tâche Laravel.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>php artisan make:command GenerateSitemap\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans le fichier \u003Ccode>app\u002FConsole\u002FCommands\u002FGenerateSitemap.php\u003C\u002Fcode>, n&rsquo;oubliez pas de préciser la variable \u003Ccode>$signature\u003C\u002Fcode> pour pouvoir exécuter la commande. Par exemple : \u003Ccode>sitemap:generate\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ainsi, vous n&rsquo;aurez plus qu&rsquo;à lancer la commande suivante pour générer votre sitemap.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>php artisan sitemap:generate\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Utilisation du package samdark\u002Fsitemap\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour créer le sitemap, j&rsquo;ai choisi d&rsquo;utiliser le package \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsamdark\u002Fsitemap\">samdark\u002Fsitemap\u003C\u002Fa>, qui propose toutes les fonctions et paramètres utiles à la création d&rsquo;un sitemap au format XML.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour installer le package :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>composer require samdark\u002Fsitemap\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Tout est désormais prêt pour créer un sitemap !\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Générer un sitemap\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans le fichier \u003Ccode>GenerateSitemap.php\u003C\u002Fcode> précédemment créé, il est maintenant temps d&rsquo;agrémenter la fonction \u003Ccode>handle()\u003C\u002Fcode>, qui s&rsquo;exécutera au lancement de la commande.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Le code se divise en 4 parties :\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>Instanciation de la classe Sitemap du package samdark\u002Fsitemap\u003C\u002Fli>\n\n\n\n\u003Cli>Ajout des URLs fixes\u003C\u002Fli>\n\n\n\n\u003Cli>Ajout des URLs générées à partir de votre BDD : articles, produits, profils utilisateurs, etc.\u003C\u002Fli>\n\n\n\n\u003Cli>Enregistrement du sitemap\u003C\u002Fli>\n\u003C\u002Fol>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>use samdark\\sitemap\\Sitemap;\u003Cbr>​\u003Cbr>public function handle() {\u003Cbr>    \u002F\u002F Création du sitemap à la racine du site\u003Cbr> &nbsp; &nbsp;$sitemap = new Sitemap(public_path('sitemap.xml'));\u003Cbr> &nbsp; &nbsp;\u003Cbr> &nbsp; &nbsp;\u002F\u002F Ajouter les URLs fixe\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;addItem(route('page.a'));\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;addItem(route('page.b'));\u003Cbr> &nbsp; &nbsp;\u003Cbr> &nbsp; &nbsp;\u002F\u002F Ajouter les URLs générées à partir de la base de données\u003Cbr> &nbsp; &nbsp;$articles = Article::getAll();\u003Cbr> &nbsp; &nbsp;foreach ($articles as $article) {\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$road = route('articles.show', $article-&gt;slug);\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$sitemap-&gt;addItem($road, $article-&gt;updated_at-&gt;timestamp);\u003Cbr> &nbsp;  }\u003Cbr> &nbsp; &nbsp;\u003Cbr> &nbsp; &nbsp;\u002F\u002F Ecriture du sitemap\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;write();\u003Cbr> &nbsp; &nbsp;\u003Cbr> &nbsp; &nbsp;$this-&gt;info('Sitemap créé avec succès !');\u003Cbr> &nbsp; &nbsp;return true;\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Exécutez la commande pour générer le sitemap. Si tout c&rsquo;est bien passé, votre sitemap devrait-être accessible à l&rsquo;adresse \u003Cem>\u002Fsitemap.xml\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Pour les sitemaps volumineux\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si votre site contient un grand nombre d&rsquo;URL, vous devriez peut-être réfléchir à scinder votre sitemap.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Un sitemap peut contenir au maximum 50 000 URL pour un poids de 50 Mo (sitemaps non compressé). Avant même d&rsquo;atteindre ces volumes de liens, c&rsquo;est une pratique courante de regrouper les URLs entres-elles.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous avez plusieurs sitemaps, il vous faudra un sitemap index, qui référencera les URLs des autres sitemaps pour que Google et les autres moteurs de recherche puissent s&rsquo;y retrouver.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Rassurez-vous, le package installé précédemment gère ça à merveille.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Voilà le code que j&rsquo;utilise lorsque je veux créer plusieurs sitemaps :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>public function handle() {\u003Cbr> &nbsp; &nbsp;\u002F\u002F Créations des sitemaps annexes\u003Cbr> &nbsp; &nbsp;$urls = &#91;];\u003Cbr> &nbsp; &nbsp;$urls = array_merge($urls, $this-&gt;Blog());\u003Cbr> &nbsp; &nbsp;$urls = array_merge($urls, $this-&gt;Products());\u003Cbr>​\u003Cbr> &nbsp; &nbsp;\u002F\u002F Création du sitemap index\u003Cbr> &nbsp; &nbsp;$index = new Index(public_path('sitemap.xml'));\u003Cbr> &nbsp; &nbsp;foreach ($urls as $url) {\u003Cbr> &nbsp; &nbsp;$index-&gt;addSitemap(url($url));\u003Cbr> &nbsp;  }\u003Cbr> &nbsp; &nbsp;$index-&gt;write();\u003Cbr>​\u003Cbr> &nbsp; &nbsp;$this-&gt;info('Sitemap created !');\u003Cbr> &nbsp; &nbsp;return true;\u003Cbr>}\u003Cbr>​\u003Cbr>private function Blog(): array {\u003Cbr> &nbsp; &nbsp;$sitemap = new Sitemap(public_path('sitemap-blog.xml'));\u003Cbr> &nbsp; &nbsp;$articles = Article::getAll();\u003Cbr> &nbsp; &nbsp;foreach ($articles as $article) {\u003Cbr> &nbsp; &nbsp;$road = route('articles.show', $article-&gt;slug);\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;addItem($road, $article-&gt;updated_at-&gt;timestamp);\u003Cbr> &nbsp;  }\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;write();\u003Cbr>​\u003Cbr> &nbsp; &nbsp;$this-&gt;info('Sitemap of blog created.');\u003Cbr> &nbsp; &nbsp;return $sitemap-&gt;getSitemapUrls('');\u003Cbr>}\u003Cbr>​\u003Cbr>private function Products(): array {\u003Cbr> &nbsp; &nbsp;$sitemap = new Sitemap(public_path('sitemap-products.xml'));\u003Cbr> &nbsp; &nbsp;$landings = Product::getAll();\u003Cbr> &nbsp; &nbsp;foreach ($products as $product) {\u003Cbr> &nbsp; &nbsp;$road = route('products.show', $product-&gt;slug);\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;addItem($road, $product-&gt;updated_at-&gt;timestamp);\u003Cbr> &nbsp;  }\u003Cbr> &nbsp; &nbsp;$sitemap-&gt;write();\u003Cbr> &nbsp; &nbsp;$this-&gt;info('Sitemap of products created.');\u003Cbr> &nbsp; &nbsp;return $sitemap-&gt;getSitemapUrls('');\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Programmer la génération du sitemap\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il ne reste plus qu&rsquo;à programmer la génération de votre sitemap.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Si vous souhaitez générer le sitemap toutes les 6h par exemple, ça se passe dans le fichier \u003Cem>app\u002FConsole\u002FKernel.php\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ajoutez :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>protected function schedule(Schedule $schedule) {\u003Cbr> &nbsp; &nbsp; $schedule-&gt;command('sitemap:generate')-&gt;everySixHours();\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">N&rsquo;oubliez pas d&rsquo;ajouter la commande nécessaire au fonctionnement du planificateur de tâche dans le cron de votre serveur :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>* * * * * cd \u002Fpath-to-your-project &amp;&amp; php artisan schedule:run &gt;&gt; \u002Fdev\u002Fnull 2&gt;&amp;1\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez également lancer la génération du sitemap après l&rsquo;enregistrement ou la mise à jour d&rsquo;une donnée, en appelant la commande précédemment créée.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>use Illuminate\\Support\\Facades\\Artisan;\u003Cbr>Artisan::call('sitemap:generate');\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">À vous d&rsquo;organiser ensuite votre code, avec les events de Laravel par exemple.\u003C\u002Fp>\n",{"rendered":508,"protected":20},"\u003Cp>Générer un sitemap pour votre site Web à l&rsquo;aide de quelques lignes de codes, d&rsquo;une commande Laravel le Task Scheduling ainsi qu&rsquo;un package PHP\u003C\u002Fp>\n",18,{"footnotes":26},[512],4,[],[515,14,34,35,36,37,38,516],"post-55","category-laravel",{"self":518,"collection":523,"about":525,"author":527,"replies":529,"version-history":532,"predecessor-version":535,"wp:featuredmedia":539,"wp:attachment":542,"wp:term":545,"curies":550},[519],{"href":520,"targetHints":521},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F55",{"allow":522},[46],[524],{"href":49},[526],{"href":52},[528],{"embeddable":55,"href":56},[530],{"embeddable":55,"href":531},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=55",[533],{"count":23,"href":534},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F55\u002Frevisions",[536],{"id":537,"href":538},56,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F55\u002Frevisions\u002F56",[540],{"embeddable":55,"href":541},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F18",[543],{"href":544},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=55",[546,548],{"taxonomy":76,"embeddable":55,"href":547},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=55",{"taxonomy":79,"embeddable":55,"href":549},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=55",[551],{"name":83,"href":84,"templated":55},{"author":553,"wp:featuredmedia":563,"wp:term":617},[554],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":555,"_links":556},{"24":92,"48":93,"96":94},{"self":557,"collection":561},[558],{"href":56,"targetHints":559},{"allow":560},[46],[562],{"href":102},[564],{"id":509,"date":565,"slug":566,"type":107,"link":567,"title":568,"author":23,"featured_media":110,"caption":569,"alt_text":26,"media_type":112,"mime_type":113,"media_details":570,"source_url":596,"_links":599},"2026-07-06T15:26:43","generer-sitemap-laravel","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Fgenerer-sitemap-laravel\u002F",{"rendered":566},{"rendered":26},{"width":115,"height":116,"file":571,"filesize":572,"sizes":573,"image_meta":597},"2026\u002F07\u002Fgenerer-sitemap-laravel.png",76870,{"medium":574,"large":578,"thumbnail":582,"medium_large":586,"1536x1536":590,"full":594},{"file":575,"width":122,"height":123,"filesize":576,"mime_type":113,"source_url":577},"generer-sitemap-laravel-300x169.png",13271,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel-300x169.png",{"file":579,"width":128,"height":129,"filesize":580,"mime_type":113,"source_url":581},"generer-sitemap-laravel-1024x576.png",51879,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel-1024x576.png",{"file":583,"width":134,"height":134,"filesize":584,"mime_type":113,"source_url":585},"generer-sitemap-laravel-150x150.png",10445,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel-150x150.png",{"file":587,"width":139,"height":140,"filesize":588,"mime_type":113,"source_url":589},"generer-sitemap-laravel-768x432.png",36643,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel-768x432.png",{"file":591,"width":145,"height":146,"filesize":592,"mime_type":113,"source_url":593},"generer-sitemap-laravel-1536x864.png",79996,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel-1536x864.png",{"file":595,"width":115,"height":116,"mime_type":113,"source_url":596},"generer-sitemap-laravel.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fgenerer-sitemap-laravel.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":598,"alt":26},[],{"self":600,"collection":604,"about":606,"author":608,"replies":610,"wp:attached-to":613,"curies":615},[601],{"href":541,"targetHints":602},{"allow":603},[46],[605],{"href":162},[607],{"href":165},[609],{"embeddable":55,"href":56},[611],{"embeddable":55,"href":612},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=18",[614],{"embeddable":55,"post_type":14,"id":30,"href":468},[616],{"name":83,"href":84,"templated":55},[618,638],[619],{"id":512,"link":620,"name":621,"slug":622,"taxonomy":76,"_links":623},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Flaravel\u002F","Laravel","laravel",{"self":624,"collection":629,"about":631,"wp:post_type":633,"curies":636},[625],{"href":626,"targetHints":627},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F4",{"allow":628},[46],[630],{"href":189},[632],{"href":192},[634],{"href":635},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=4",[637],{"name":83,"href":84,"templated":55},[],{"id":30,"date":640,"date_gmt":641,"guid":642,"modified":644,"modified_gmt":645,"slug":646,"status":13,"type":14,"link":647,"title":648,"content":650,"excerpt":652,"author":23,"featured_media":654,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":655,"categories":656,"tags":658,"class_list":659,"_links":662,"_embedded":696},"2022-11-09T15:00:00","2022-11-09T14:00:00",{"rendered":643},"http:\u002F\u002Fcms.lcdev.fr\u002F?p=8","2026-07-06T15:44:26","2026-07-06T13:44:26","formulaire-elementor-wordpress-0-spam-avec-cette-methode","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002F",{"rendered":649},"Formulaire Elementor WordPress : 0 spam avec cette méthode",{"rendered":651,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">Quoi de plus énervant que de recevoir des centaines de demandes de contact, ou de devis qui s’avère finalement être des spams ?\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J’ai rencontré il y à peu ce cas pour un client. Au-delà de sa boîte mail bien remplie de publicité pour des produits frauduleux ou peu recommandables, il me racontait \u003Cstrong>pire encore\u003C\u002Fstrong>. Il passait à côté de prospects fortement intéressés par ses offres, car ceux-ci étaient noyés au milieu des courriers indésirables.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sur un site WordPress, construit avec Elementor comme le sien, il est pourtant facile d’éviter 99&nbsp;% de spams.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Technique du honey pot ou pot de miel\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour commencer, il est important de savoir que les spams de ce genre sont envoyés par des robots, qui parcourent le Web à la recherche de formulaire de contact qu’ils peuvent remplir pour envoyer leurs pubs.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La technique du pot de miel est une solution populaire pour tenter de bloquer les spams. Elle consiste à ajouter un champ masqué pour vos visiteurs, mais qui figurera bien dans le code de votre site Web. Les robots lisant le code de votre site pour envoyer des spams, ils rempliront le champ masqué. C’est là que le honey pot fait effet&nbsp;: si le champ masqué est rempli, le formulaire est marqué comme invalide et n’est pas envoyé.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Elementor permet en quelques clics d’ajouter un honey pot à vos formulaires.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ouvrez la page où se situe le formulaire à modifier avec l’éditeur Elementor.\u003Cbr>\u003Cbr>Sélectionnez le formulaire puis, dans l’ordre&nbsp;:\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>Ouvrir l’accordéon « champs de formulaire »\u003C\u002Fli>\n\n\n\n\u003Cli>Cliquez sur « Ajouter un élément »\u003C\u002Fli>\n\n\n\n\u003Cli>Choisissez « Pot de miel » comme type, puis écrivez un libellé pour plus de crédibilité\u003C\u002Fli>\n\n\n\n\u003Cli>Enregistrez votre page modifiée\u003C\u002Fli>\n\u003C\u002Fol>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"354\" height=\"546\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-honey-pot-elementor.png\" alt=\"Ajouter un pot de miel à votre formulaire Elementor\" class=\"wp-image-10\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-honey-pot-elementor.png 354w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-honey-pot-elementor-195x300.png 195w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Voilà, en quelques secondes, vous avez pu protéger votre formulaire avec un pot de miel !\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Malheureusement, les robots qui utilisent vos formulaires pour vous envoyer des spams sont de plus en plus performants et sont capables de contourner les champs pot de miel. Un très bon plugin va néanmoins pouvoir vous aider&nbsp;: Maspik.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Maspik&nbsp;: le plugin qui va vraiment bloquer les spams\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Maspik est une extension qui va comparer les données des formulaires aux paramètres de filtrages que vous avez définis. Si le formulaire répond à un critère que vous avez défini comme bloquant, alors il ne sera pas envoyé. C’est grâce à ce plugin que j’ai réussi à \u003Cstrong>bloquer 100 % des spams\u003C\u002Fstrong> pour mon client.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"772\" height=\"250\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-spam-blacklist-wordpress-plugin.jpg\" alt=\"Maspik, plugin anti-spam pour WordPress\" class=\"wp-image-22\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-spam-blacklist-wordpress-plugin.jpg 772w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-spam-blacklist-wordpress-plugin-300x97.jpg 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-spam-blacklist-wordpress-plugin-768x249.jpg 768w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Le plugin se trouve dans la bibliothèque d’extensions WordPress, donc rien de bien compliqué pour l’installer&nbsp;:\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>Depuis votre back-office WordPress, aller dans Extensions puis Ajouter\u003C\u002Fli>\n\n\n\n\u003Cli>Chercher « maspik » dans la barre de recherche\u003C\u002Fli>\n\n\n\n\u003Cli>Installer le plugin Maspik — Spam blacklist\u003C\u002Fli>\n\u003C\u002Fol>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il est désormais temps de configurer l’extension. Après avoir installé le plugin, vous devriez voir apparaître une nouvelle entrée dénommée Anti Spam dans le menu d’administration. Si ce n’est pas le cas, n’hésitez pas à rafraîchir la page.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La configuration est à affiner au cas par cas et va dépendre des informations que vous collectez dans vos formulaires.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Je vous conseille tout d’abord de cocher « Bloquez les demandes dépourvues d’URL source ». Cela bloquera tous les robots qui utilisent votre formulaire pour vous envoyer des spams sans même passer par votre site.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ce qui a ensuite bloqué le spam à 100&nbsp;% chez mon client, c’est l’option « Marquer comme indésirable si la zone de texte contient X ou plus de liens. ». J’ai défini la valeur à 1, pour que chaque formulaire avec 1 ou plusieurs liens soient marqués directement comme spam.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"83\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-liens.png\" alt=\"Maspik : bloquer les formulaires qui contiennent des liens\" class=\"wp-image-21\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-liens.png 808w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-liens-300x31.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-liens-768x79.png 768w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous devriez pouvoir faire comme moi dans la plupart des cas. Néanmoins, si vous récoltez des URLs dans vos formulaires, par exemple si vous êtes [SEO](\u003Cem>\u002Fseo\u002F\u003C\u002Fem>) et que vous voulez connaître le site de vos clients, ce paramétrage ne conviendra pas.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">À la place, vous pouvez définir comme langue nécessaire « Latin », pour exiger des messages en caractère latin et bloquer tous les messages écrits en caractères grec, russe ou encore thaïlandais.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"81\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-langues.png\" alt=\"Maspik : bloquer les langues étrangères\" class=\"wp-image-20\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-langues.png 900w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-langues-300x27.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fmaspik-bloquer-langues-768x69.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour aller encore plus loin, vous pouvez cocher « Allow only the following countries » et autoriser dans le champ juste en dessous les pays autorisés à vous envoyer des messages.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Toujours pour affiner, si vous vous apercevez que les adresses mail des faux prospects sont toujours les mêmes, vous pouvez les bloquer avec l’option « Champ d’e-mail ».\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans tous les cas, affinez progressivement les paramètres de blocages\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Bloquer les spams WordPress Elementor&nbsp;: en résumé\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">En quelques mots, voici ce que vous devez retenir pour \u003Cstrong>bloquer les spams des formulaires Elementor sur WordPress\u003C\u002Fstrong> :\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>Le honey pot est une solution simple à mettre en place, mais que les robots contournent de plus en plus\u003C\u002Fli>\n\n\n\n\u003Cli>Le plugin Maspik est très puissant pour bloquer les formulaires indésirables à l’aide de paramètre simple\u003C\u002Fli>\n\n\n\n\u003Cli>Affinez progressivement les paramètres pour éviter de tout bloquer\u003C\u002Fli>\n\u003C\u002Fol>\n",{"rendered":653,"protected":20},"\u003Cp>Bloquez tous les courriers indésirables que vous recevez à travers vos formulaires Elementor grâce à une méthode simple et efficace.\u003C\u002Fp>\n",26,{"footnotes":26},[657],3,[],[660,14,34,35,36,37,38,661],"post-8","category-wordpress",{"self":663,"collection":667,"about":669,"author":671,"replies":673,"version-history":676,"predecessor-version":679,"wp:featuredmedia":683,"wp:attachment":686,"wp:term":689,"curies":694},[664],{"href":468,"targetHints":665},{"allow":666},[46],[668],{"href":49},[670],{"href":52},[672],{"embeddable":55,"href":56},[674],{"embeddable":55,"href":675},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=8",[677],{"count":30,"href":678},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F8\u002Frevisions",[680],{"id":681,"href":682},35,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F8\u002Frevisions\u002F35",[684],{"embeddable":55,"href":685},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F26",[687],{"href":688},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=8",[690,692],{"taxonomy":76,"embeddable":55,"href":691},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=8",{"taxonomy":79,"embeddable":55,"href":693},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=8",[695],{"name":83,"href":84,"templated":55},{"author":697,"wp:featuredmedia":707,"wp:term":761},[698],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":699,"_links":700},{"24":92,"48":93,"96":94},{"self":701,"collection":705},[702],{"href":56,"targetHints":703},{"allow":704},[46],[706],{"href":102},[708],{"id":654,"date":709,"slug":710,"type":107,"link":711,"title":712,"author":23,"featured_media":110,"caption":713,"alt_text":26,"media_type":112,"mime_type":113,"media_details":714,"source_url":740,"_links":743},"2026-07-06T15:26:50","wordpress-elementor-0-spam","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Fwordpress-elementor-0-spam\u002F",{"rendered":710},{"rendered":26},{"width":115,"height":116,"file":715,"filesize":716,"sizes":717,"image_meta":741},"2026\u002F07\u002Fwordpress-elementor-0-spam.png",124370,{"medium":718,"large":722,"thumbnail":726,"medium_large":730,"1536x1536":734,"full":738},{"file":719,"width":122,"height":123,"filesize":720,"mime_type":113,"source_url":721},"wordpress-elementor-0-spam-300x169.png",18854,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam-300x169.png",{"file":723,"width":128,"height":129,"filesize":724,"mime_type":113,"source_url":725},"wordpress-elementor-0-spam-1024x576.png",79554,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam-1024x576.png",{"file":727,"width":134,"height":134,"filesize":728,"mime_type":113,"source_url":729},"wordpress-elementor-0-spam-150x150.png",14282,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam-150x150.png",{"file":731,"width":139,"height":140,"filesize":732,"mime_type":113,"source_url":733},"wordpress-elementor-0-spam-768x432.png",55900,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam-768x432.png",{"file":735,"width":145,"height":146,"filesize":736,"mime_type":113,"source_url":737},"wordpress-elementor-0-spam-1536x864.png",124200,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam-1536x864.png",{"file":739,"width":115,"height":116,"mime_type":113,"source_url":740},"wordpress-elementor-0-spam.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fwordpress-elementor-0-spam.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":742,"alt":26},[],{"self":744,"collection":748,"about":750,"author":752,"replies":754,"wp:attached-to":757,"curies":759},[745],{"href":685,"targetHints":746},{"allow":747},[46],[749],{"href":162},[751],{"href":165},[753],{"embeddable":55,"href":56},[755],{"embeddable":55,"href":756},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=26",[758],{"embeddable":55,"post_type":14,"id":30,"href":468},[760],{"name":83,"href":84,"templated":55},[762,782],[763],{"id":657,"link":764,"name":765,"slug":766,"taxonomy":76,"_links":767},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Fwordpress\u002F","Wordpress","wordpress",{"self":768,"collection":773,"about":775,"wp:post_type":777,"curies":780},[769],{"href":770,"targetHints":771},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F3",{"allow":772},[46],[774],{"href":189},[776],{"href":192},[778],{"href":779},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=3",[781],{"name":83,"href":84,"templated":55},[],{"id":784,"date":785,"date_gmt":786,"guid":787,"modified":789,"modified_gmt":790,"slug":791,"status":13,"type":14,"link":792,"title":793,"content":795,"excerpt":797,"author":23,"featured_media":799,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":800,"categories":801,"tags":802,"class_list":803,"_links":805,"_embedded":840},36,"2022-09-26T17:00:00","2022-09-26T15:00:00",{"rendered":788},"http:\u002F\u002Fcms.lcdev.fr\u002F?p=36","2026-07-06T15:47:27","2026-07-06T13:47:27","laravel-ajouter-des-informations-supplementaires-aux-logs","https:\u002F\u002Fcms.lcdev.fr\u002Flaravel-ajouter-des-informations-supplementaires-aux-logs\u002F",{"rendered":794},"Ajouter des informations supplémentaires aux logs Laravel",{"rendered":796,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">La gestion des logs sur Laravel, c&rsquo;est génial ! Sans configuration ou avec seulement quelques lignes, on peut facilement choisir où enregistrer les logs, ses journaux d&rsquo;informations absolument indispensables au bon maintient d&rsquo;une application.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Malheureusement, on peut rapidement manquer d&rsquo;information, notamment en production, pour bien comprendre comment le bug s&rsquo;est produit et pouvoir ainsi le résoudre.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Fort heureusement, Laravel propose de personnaliser tout ça et l&rsquo;on peut facilement ajouter des informations complémentaires à chaque log.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ce tutoriel est issu d&rsquo;un cas pratique où j&rsquo;avais besoin d&rsquo;ajouter ces 4 informations aux logs :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Utilisateur connecté ou visiteur dans le cas contraire\u003C\u002Fli>\n\n\n\n\u003Cli>IP de l&rsquo;utilisateur\u003C\u002Fli>\n\n\n\n\u003Cli>Méthode de la requête (GET, POST, PUT&#8230;)\u003C\u002Fli>\n\n\n\n\u003Cli>URI (= URL + paramètre GET de la requête)\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Personnaliser l&rsquo;écriture des logs\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Ajouter des informations\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour commencer, il vous faut créer une classe qui sera instanciée à chaque log et qui s&rsquo;occupera de personnaliser les données. Personnellement, j&rsquo;ai créé une classe \u003Cstrong>CustomizeFormatter\u003C\u002Fstrong>, dans \u003Cem>app\u002FLogging\u002FCustomizeFormatter.php\u003C\u002Fem>. Vous êtes libre de renommer cette classe et de la placer dans un autre dossier, ceci à peu d&rsquo;importance.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans mon cas, j&rsquo;avais besoin d&rsquo;injecter (via l&rsquo;injection des dépendances) la Request. Vous pouvez personnaliser le constructeur selon vos besoins, voir le supprimer.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>&lt;?php\u003Cbr>​\u003Cbr>namespace App\\Logging;\u003Cbr>​\u003Cbr>use Illuminate\\Http\\Request;\u003Cbr>use Monolog\\Formatter\\LineFormatter;\u003Cbr>​\u003Cbr>class CustomizeFormatter\u003Cbr>{\u003Cbr> &nbsp; &nbsp;protected $request;\u003Cbr>​\u003Cbr> &nbsp; &nbsp;public function __construct(Request $request = null) {\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;request = $request;\u003Cbr> &nbsp;  }\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il faut ensuite une fonction qui prend en paramètre un tableau $record. Cette variable contient toutes les informations du log qui va être inséré dans les fichiers journaux. La variable doit ce même tableau, avec les données additionnelles. J&rsquo;ai appelé cette fonction \u003Cem>processLogRecord\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Voici ce que contient la variable $record, si on essaie de créer un log avec \u003Ccode>Log::info('test')\u003C\u002Fcode> :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>array:7 &#91; ▼\u003Cbr> &nbsp;\"message\" =&gt; \"test\"\u003Cbr> &nbsp;\"context\" =&gt; &#91;]\u003Cbr> &nbsp;\"level\" =&gt; 200\u003Cbr> &nbsp;\"level_name\" =&gt; \"INFO\"\u003Cbr> &nbsp;\"channel\" =&gt; \"local\"\u003Cbr> &nbsp;\"datetime\" =&gt; Monolog\\DateTimeImmutable @1637680814 {#554 ▼\u003Cbr> &nbsp; &nbsp;-useMicroseconds: true\u003Cbr> &nbsp; &nbsp;date: 2021-11-23 16:20:14.637234 Europe\u002FMonaco (+01:00)\u003Cbr>  }\u003Cbr> &nbsp;\"extra\" =&gt; &#91;]\u003Cbr>]\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nous allons ajouter nos informations complémentaires dans le tableau \u003Cem>extra\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cem>Pensez à bien merge vos données avec celles qui pourraient déjà être présente dans la variable $record[&lsquo;extra&rsquo;], sous peine de perdre des données.\u003C\u002Fem>\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>public function processLogRecord(array $record): array {\u003Cbr> &nbsp; &nbsp;\u002F\u002F Only if Request could be injected\u003Cbr> &nbsp; &nbsp;if ($this-&gt;request) {\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$record&#91;'extra'] += &#91;\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'user' =&gt; $this-&gt;request-&gt;user()-&gt;email ?? 'guest',\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'ip' =&gt; $this-&gt;request-&gt;getClientIp(),\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'method' =&gt; $this-&gt;request-&gt;getMethod(),\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'uri' =&gt; $this-&gt;request-&gt;getUri()\u003Cbr> &nbsp; &nbsp; &nbsp;  ];\u003Cbr> &nbsp;  }\u003Cbr>​\u003Cbr> &nbsp; &nbsp;return $record;\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Choisir les informations à afficher pour chaque log\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Une fois les données que vous souhaitez ajouter dans la variable \u003Cem>$record[&lsquo;extra&rsquo;]\u003C\u002Fem>, il vous faut créer une fonction \u003Cem>__invoke()\u003C\u002Fem> qui sera appelé à chaque instanciation de la classe et qui a pour but de :\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>appeler la fonction pour ajouter des données complémentaires\u003C\u002Fli>\n\n\n\n\u003Cli>personnaliser le format d&rsquo;affichage du log\u003C\u002Fli>\n\u003C\u002Fol>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour afficher une information précédemment ajoutée, l&rsquo;IP par exemple, il vous suffit d&rsquo;utiliser le shortcode suivant : \u003Cem>%extra.ip%\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vous pouvez utiliser et personnaliser le code ci-dessous, qui est une bonne base.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">A noter qu&rsquo;il faut utiliser \\n pour effectuer un retour à la ligne.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>public function __invoke($logger) {\u003Cbr> &nbsp; &nbsp;foreach ($logger-&gt;getHandlers() as $handler) {\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$handler-&gt;pushProcessor(&#91;$this, 'processLogRecord']);\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;$handler-&gt;setFormatter(new LineFormatter(\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\"&#91;%datetime%] %channel%.%level_name%: %message%\\nUser : %extra.user%\\nIP : %extra.ip%\\nURL: %extra.method% %extra.uri%\\n%context% %extra%\\n\\n\", 'Y-m-d H:i:s'));\u003Cbr> &nbsp;  }\u003Cbr>}\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Appliquer la personnalisation\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Maintenant que notre classe est prête à personnaliser les données des logs, il ne reste plus qu&rsquo;à configurer son utilisation.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans le fichier \u003Cem>config\u002Flogging.php\u003C\u002Fem>, rajouté une clé \u003Cem>tap\u003C\u002Fem> avec pour valeur un tableau qui contient la classe que vous venez de créer, le tout dans la configuration de log que vous souhaitez personnaliser.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>'daily' =&gt; &#91;\u003Cbr> &nbsp; &nbsp;'driver' =&gt; 'daily',\u003Cbr> &nbsp; &nbsp;'tap' =&gt; &#91;\\App\\Logging\\CustomizeFormatter::class], \u002F\u002F Add this line\u003Cbr> &nbsp; &nbsp;'path' =&gt; storage_path('logs\u002Flaravel.log'),\u003Cbr> &nbsp; &nbsp;'level' =&gt; 'debug',\u003Cbr> &nbsp; &nbsp;'days' =&gt; 14,\u003Cbr>],\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Vos logs devraient désormais être agrémentés de données supplémentaires ! Bon débogage !\u003C\u002Fp>\n",{"rendered":798,"protected":20},"\u003Cp>Ajouter des informations aux logs Laravel utiles lors du débogage, notamment en production\u003C\u002Fp>\n",11,{"footnotes":26},[512],[],[804,14,34,35,36,37,38,516],"post-36",{"self":806,"collection":811,"about":813,"author":815,"replies":817,"version-history":820,"predecessor-version":823,"wp:featuredmedia":827,"wp:attachment":830,"wp:term":833,"curies":838},[807],{"href":808,"targetHints":809},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F36",{"allow":810},[46],[812],{"href":49},[814],{"href":52},[816],{"embeddable":55,"href":56},[818],{"embeddable":55,"href":819},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=36",[821],{"count":23,"href":822},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F36\u002Frevisions",[824],{"id":825,"href":826},37,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F36\u002Frevisions\u002F37",[828],{"embeddable":55,"href":829},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F11",[831],{"href":832},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=36",[834,836],{"taxonomy":76,"embeddable":55,"href":835},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=36",{"taxonomy":79,"embeddable":55,"href":837},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=36",[839],{"name":83,"href":84,"templated":55},{"author":841,"wp:featuredmedia":851,"wp:term":905},[842],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":843,"_links":844},{"24":92,"48":93,"96":94},{"self":845,"collection":849},[846],{"href":56,"targetHints":847},{"allow":848},[46],[850],{"href":102},[852],{"id":799,"date":853,"slug":854,"type":107,"link":855,"title":856,"author":23,"featured_media":110,"caption":857,"alt_text":26,"media_type":112,"mime_type":113,"media_details":858,"source_url":884,"_links":887},"2026-07-06T15:26:36","ajouter-information-log","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Fajouter-information-log\u002F",{"rendered":854},{"rendered":26},{"width":115,"height":116,"file":859,"filesize":860,"sizes":861,"image_meta":885},"2026\u002F07\u002Fajouter-information-log.png",93155,{"medium":862,"large":866,"thumbnail":870,"medium_large":874,"1536x1536":878,"full":882},{"file":863,"width":122,"height":123,"filesize":864,"mime_type":113,"source_url":865},"ajouter-information-log-300x169.png",14260,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log-300x169.png",{"file":867,"width":128,"height":129,"filesize":868,"mime_type":113,"source_url":869},"ajouter-information-log-1024x576.png",59225,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log-1024x576.png",{"file":871,"width":134,"height":134,"filesize":872,"mime_type":113,"source_url":873},"ajouter-information-log-150x150.png",11917,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log-150x150.png",{"file":875,"width":139,"height":140,"filesize":876,"mime_type":113,"source_url":877},"ajouter-information-log-768x432.png",43488,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log-768x432.png",{"file":879,"width":145,"height":146,"filesize":880,"mime_type":113,"source_url":881},"ajouter-information-log-1536x864.png",94434,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log-1536x864.png",{"file":883,"width":115,"height":116,"mime_type":113,"source_url":884},"ajouter-information-log.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fajouter-information-log.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":886,"alt":26},[],{"self":888,"collection":892,"about":894,"author":896,"replies":898,"wp:attached-to":901,"curies":903},[889],{"href":829,"targetHints":890},{"allow":891},[46],[893],{"href":162},[895],{"href":165},[897],{"embeddable":55,"href":56},[899],{"embeddable":55,"href":900},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=11",[902],{"embeddable":55,"post_type":14,"id":30,"href":468},[904],{"name":83,"href":84,"templated":55},[906,921],[907],{"id":512,"link":620,"name":621,"slug":622,"taxonomy":76,"_links":908},{"self":909,"collection":913,"about":915,"wp:post_type":917,"curies":919},[910],{"href":626,"targetHints":911},{"allow":912},[46],[914],{"href":189},[916],{"href":192},[918],{"href":635},[920],{"name":83,"href":84,"templated":55},[],{"id":923,"date":924,"date_gmt":925,"guid":926,"modified":928,"modified_gmt":929,"slug":930,"status":13,"type":14,"link":931,"title":932,"content":934,"excerpt":936,"author":23,"featured_media":938,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":939,"categories":940,"tags":941,"class_list":942,"_links":944,"_embedded":979},38,"2022-09-26T11:30:00","2022-09-26T09:30:00",{"rendered":927},"http:\u002F\u002Fcms.lcdev.fr\u002F?p=38","2026-07-06T15:48:59","2026-07-06T13:48:59","laravel-resoudre-l-erreur-could-not-load-mock-my-class-class-already-exists","https:\u002F\u002Fcms.lcdev.fr\u002Flaravel-resoudre-l-erreur-could-not-load-mock-my-class-class-already-exists\u002F",{"rendered":933},"Laravel : résoudre l&rsquo;erreur « Could not load mock MyClass, class already exists",{"rendered":935,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">Lorsque vous réalisez des tests unitaires sur Laravel, il est parfois très utiles (voir nécessaire) de réaliser des mock, c&rsquo;est à dire de simuler la réponse d&rsquo;une fonction. Ainsi, vous pouvez fixer la valeur retourné par une fonction pour établir les tests qui en découle.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Laravel utilise la librarie Mockery pour établir des mock de vos classes.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Malheureusement, la multiplication des mocks peut parfois découler sur l&rsquo;erreur suivante :\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Ccode>Could not load mock App\\Models\\YourClass, class already exists\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Une astuce toute simple permet de résoudre cette problématique. Il vous suffit de rajouter les lignes de commentaires suivantes au dessus de la déclaration de votre fonction de test :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u002F**\u003Cbr> * @runInSeparateProcess\u003Cbr> * @preserveGlobalState disabled\u003Cbr> *\u002F\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Elle permet d&rsquo;isoler l&rsquo;exécution des tests et d&rsquo;éviter les effets de bords lié à l&rsquo;utilisation de Mockery.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bon tests unitaires !\u003C\u002Fp>\n",{"rendered":937,"protected":20},"\u003Cp>Astuce pour résoudre l&rsquo;erreur lié au mock de classe\u003C\u002Fp>\n",19,{"footnotes":26},[512],[],[943,14,34,35,36,37,38,516],"post-38",{"self":945,"collection":950,"about":952,"author":954,"replies":956,"version-history":959,"predecessor-version":962,"wp:featuredmedia":966,"wp:attachment":969,"wp:term":972,"curies":977},[946],{"href":947,"targetHints":948},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F38",{"allow":949},[46],[951],{"href":49},[953],{"href":52},[955],{"embeddable":55,"href":56},[957],{"embeddable":55,"href":958},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=38",[960],{"count":23,"href":961},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F38\u002Frevisions",[963],{"id":964,"href":965},39,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F38\u002Frevisions\u002F39",[967],{"embeddable":55,"href":968},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F19",[970],{"href":971},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=38",[973,975],{"taxonomy":76,"embeddable":55,"href":974},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=38",{"taxonomy":79,"embeddable":55,"href":976},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=38",[978],{"name":83,"href":84,"templated":55},{"author":980,"wp:featuredmedia":990,"wp:term":1044},[981],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":982,"_links":983},{"24":92,"48":93,"96":94},{"self":984,"collection":988},[985],{"href":56,"targetHints":986},{"allow":987},[46],[989],{"href":102},[991],{"id":938,"date":992,"slug":993,"type":107,"link":994,"title":995,"author":23,"featured_media":110,"caption":996,"alt_text":26,"media_type":112,"mime_type":113,"media_details":997,"source_url":1023,"_links":1026},"2026-07-06T15:26:45","laravel-resoudre-erreur-mock","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Flaravel-resoudre-erreur-mock\u002F",{"rendered":993},{"rendered":26},{"width":115,"height":116,"file":998,"filesize":999,"sizes":1000,"image_meta":1024},"2026\u002F07\u002Flaravel-resoudre-erreur-mock.png",117006,{"medium":1001,"large":1005,"thumbnail":1009,"medium_large":1013,"1536x1536":1017,"full":1021},{"file":1002,"width":122,"height":123,"filesize":1003,"mime_type":113,"source_url":1004},"laravel-resoudre-erreur-mock-300x169.png",18299,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock-300x169.png",{"file":1006,"width":128,"height":129,"filesize":1007,"mime_type":113,"source_url":1008},"laravel-resoudre-erreur-mock-1024x576.png",77584,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock-1024x576.png",{"file":1010,"width":134,"height":134,"filesize":1011,"mime_type":113,"source_url":1012},"laravel-resoudre-erreur-mock-150x150.png",12650,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock-150x150.png",{"file":1014,"width":139,"height":140,"filesize":1015,"mime_type":113,"source_url":1016},"laravel-resoudre-erreur-mock-768x432.png",54228,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock-768x432.png",{"file":1018,"width":145,"height":146,"filesize":1019,"mime_type":113,"source_url":1020},"laravel-resoudre-erreur-mock-1536x864.png",119718,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock-1536x864.png",{"file":1022,"width":115,"height":116,"mime_type":113,"source_url":1023},"laravel-resoudre-erreur-mock.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Flaravel-resoudre-erreur-mock.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":1025,"alt":26},[],{"self":1027,"collection":1031,"about":1033,"author":1035,"replies":1037,"wp:attached-to":1040,"curies":1042},[1028],{"href":968,"targetHints":1029},{"allow":1030},[46],[1032],{"href":162},[1034],{"href":165},[1036],{"embeddable":55,"href":56},[1038],{"embeddable":55,"href":1039},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=19",[1041],{"embeddable":55,"post_type":14,"id":30,"href":468},[1043],{"name":83,"href":84,"templated":55},[1045,1060],[1046],{"id":512,"link":620,"name":621,"slug":622,"taxonomy":76,"_links":1047},{"self":1048,"collection":1052,"about":1054,"wp:post_type":1056,"curies":1058},[1049],{"href":626,"targetHints":1050},{"allow":1051},[46],[1053],{"href":189},[1055],{"href":192},[1057],{"href":635},[1059],{"name":83,"href":84,"templated":55},[],{"id":1062,"date":1063,"date_gmt":1064,"guid":1065,"modified":1067,"modified_gmt":1068,"slug":1069,"status":13,"type":14,"link":1070,"title":1071,"content":1073,"excerpt":1075,"author":23,"featured_media":1077,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":1078,"categories":1079,"tags":1081,"class_list":1082,"_links":1085,"_embedded":1120},59,"2022-02-01T19:00:00","2022-02-01T18:00:00",{"rendered":1066},"https:\u002F\u002Fcms.lcdev.fr\u002F?p=59","2026-07-08T16:49:50","2026-07-08T14:49:50","utiliser-les-donnees-osm-pour-connaitre-les-cols-et-sommets-franchis-a-partir-d-un-fichier-gpx","https:\u002F\u002Fcms.lcdev.fr\u002Futiliser-les-donnees-osm-pour-connaitre-les-cols-et-sommets-franchis-a-partir-d-un-fichier-gpx\u002F",{"rendered":1072},"Utiliser les données OSM pour connaître les cols et sommets franchis à partir d&rsquo;un fichier GPX",{"rendered":1074,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">Chaque année, je passe des cols et gravit des sommets à pied (trail \u002F randonnée) ou à vélo de route. J&rsquo;enregistre chacune de mes sorties avec une montre Suunto ou mon téléphone et synchronise le tout sur Strava. Toutes mes activités sportives sont donc sur le web et en fin d&rsquo;année, j&rsquo;aimerai bien me faire un petit récap pour me remémorer où je suis passé sans me palucher toutes mes sorties. Après un peu de recherche et quelques lignes de codes, je peux désormais faire ça facilement. C&rsquo;est parti pour les explications !\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Récupérer les POIs où j’ai pu passer\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">\u003Cstrong>Données OpenStreetMap\u003C\u002Fstrong>\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La première chose à faire, c’est de récupérer tous les POIs (Point Of Intereset ; dans mon cas les cols et sommet) où j’aurai pu passer, avec leurs coordonnées géographiques (latitude \u002F longitude).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour avoir ce genre de données, il existe un super projet opensource qui est la base d’une bonne partie des projets cartographiques sur le Web : OpenStreetMap.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"285\" height=\"42\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fpropulse-par-osm.png\" alt=\"\" class=\"wp-image-24\"\u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cem>Le service Mapbox utilise les données OSM pour générer ses cartes\u003C\u002Fem>\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Ca href=\"https:\u002F\u002Fwww.openstreetmap.org\u002F\">OpenStreetMap.org\u003C\u002Fa>, propose d’exporter toutes les informations d’une zone affichée à l’écran. Malheureusement, cette zone est limitée en taille et impossible pour moi d’exporter tous les massifs où je me suis rendu, à moins de le faire en plusieurs fois. Je me suis donc tourné vers Geofabrik qui propose de télécharger toutes les données d’un pays ou d’une région.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">A noter que les exports OpenStreetMap se font au format .OSM, qui sont des fichiers XML, qu’on peut lire facilement avec n’importe quel langage de programmation.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Geofabrik lui, propose les données au format .pbf, qui est un format compilé. Enfaite, ils ont été obligés de compiler les données car rien que l&rsquo;Europe c&rsquo;est presque 25Go donc imaginez en bon vieux XML&#8230;\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J’ai donc récupéré le fichier Rhône-Alpes étant donné que 99.5% de mes sorties étaient dans cette zone.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Serveur MongoDB avec Docker\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour stocker tous les POIs qui m’intéressent, j’ai fait le choix d’une base de données NoSQL MongoDB. À la base, j’avais fait ce choix car MongoDB propose des fonctionnalités géographiques sans installer quoi que ce soit en plus, mais finalement je n’en aurai pas eu besoin. Autre avantage, c&rsquo;est que je ne perdrai pas de temps à imaginer une structure de données au préalable (MongoDB est « schemaless »).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour avoir un serveur MongoDB avec Docker :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>docker run -p 27017:27017 -v \u002Fopt\u002Fmongodb\u002Fdb:\u002Fdata\u002Fdb --name my-mongo -d mongo\u003Cbr>​\u003Cbr>Explication :\u003Cbr>-p 27017:27017 pour mapper le port 27017 (port par défaut de mongoDB) du container avec le 27017 du host\u003Cbr>-v \u002Fopt\u002Fmongodb\u002Fdb:\u002Fdata\u002Fdb pour indiquer où stocker les données et ne pas les perdre au redémarrage de la machine \u002F du container\u003Cbr>--name my-mongo un jolie nom à notre container\u003Cbr>-d pour détacher le container du terminal\u003Cbr>mongo le nom de l'image utilisé\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Comment se présente un fichier OSM ?\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Avant de lire le fichier de données, il me semble intéressant d&rsquo;expliquer rapidement ce qu&rsquo;il contient pour mieux comprendre la suite des explications.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Comme je le disais plus haut, les fichiers OSM sont des fichiers au format XML. Ils contiennent :\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>des nœuds (un point avec une latitude et une longitude)\u003C\u002Fli>\n\n\n\n\u003Cli>des chemins (ensemble de nœuds)\u003C\u002Fli>\n\n\n\n\u003Cli>des relations (ensemble de nœuds et chemin pour décrire une ligne de bus par exemple)\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Ces éléments peuvent avoir des tags qui donnent des informations supplémentaires. Voilà comment se présente le nœud du Mont Ventoux :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode> &lt;node id=\"411436529\" visible=\"true\" version=\"7\" changeset=\"75561193\" timestamp=\"2019-10-11T11:51:34Z\" user=\"mirelon\" uid=\"1270972\" lat=\"44.1739649\" lon=\"5.2783976\"&gt;\u003Cbr> &nbsp;&lt;tag k=\"alt_name\" v=\"Le Sommet\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"ele\" v=\"1909\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"name\" v=\"Mont Ventoux\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"natural\" v=\"peak\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"prominence\" v=\"1150\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"source\" v=\"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"tourism\" v=\"attraction\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"website\" v=\"http:\u002F\u002Fwww.veloventoux.com\u002F?c=montVentoux\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"wikidata\" v=\"Q209064\"\u002F&gt;\u003Cbr> &nbsp;&lt;tag k=\"wikipedia\" v=\"fr:Mont Ventoux\"\u002F&gt;\u003Cbr> &lt;\u002Fnode&gt;\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Les fichiers .PBF retrouvent les mêmes informations, ils ont juste été compilé et demande à être décompilé pour être lu.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Extraire les cols et sommets de la région Rhône-Alpes\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J’ai choisi le langage Python et le package \u003Ccode>osmiter\u003C\u002Fcode> pour lire le fichier binaire .pbf et en extraire tous les cols et sommets pour les stocker dans la base de données. L’occasion pour moi de changer un peu de langage (et de galérer aussi !). Pardonnez-moi d’avance si ce code n’est pas des plus beaux 😄\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J&rsquo;ai donc écrit un programme qui lit chaque nœud du fichier rhone-alpes-latest.osm.pbf. Pour chaque nœud qui possède le tag \u003Ccode>natural\u003C\u002Fcode> avec pour valeur \u003Ccode>saddle\u003C\u002Fcode> (= col) ou \u003Ccode>peak\u003C\u002Fcode> (=sommet) et qui ont un nom (il y a des sommets ou cols sans nom parfois mais ça ne m&rsquo;intéresse guère), je l’insère dans un tableau. Tous les 100 POIs, j’envoie le tableau en base de données. Sur environ 4500 points d&rsquo;intérêts ça permet d’éviter 4500 appels à la base de données et de réduire ça à 450. Bon, c’était plus pour le fun car on fera ce processus une seul fois donc l’intérêt reste limité.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>#!\u002Fusr\u002Fbin\u002Fpython3\u003Cbr># coding: utf-8\u003Cbr>​\u003Cbr>from pymongo import MongoClient\u003Cbr>import osmiter\u003Cbr>​\u003Cbr>client = MongoClient(host=\"localhost\", port=27017)\u003Cbr>​\u003Cbr>db = client.osm\u003Cbr>poi = db.poi\u003Cbr>​\u003Cbr>results = &#91;]\u003Cbr>for feature in osmiter.iter_from_osm(\"rhone-alpes-latest.osm.pbf\"):\u003Cbr> &nbsp; &nbsp;if feature&#91;\"type\"] == \"node\" and \"natural\" in feature&#91;\"tag\"]:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;if feature&#91;\"tag\"]&#91;\"natural\"] in &#91;\"saddle\", \"peak\"] and \"name\" in feature&#91;\"tag\"]:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;results.append({\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'name': feature&#91;\"tag\"]&#91;\"name\"],\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'type': feature&#91;\"tag\"]&#91;'natural'],\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\"coord\": &#91;feature&#91;\"lat\"], feature&#91;\"lon\"]],\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  })\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;if len(results) == 100:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;db.poi.insert_many(results)\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;results = &#91;]\u003Cbr>​\u003Cbr>db.poi.insert_many(results)\u003Cbr>print(str(db.poi.count()) + \" POIs extracted !\")\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Après quelques minutes de traitement, notre base de données se retrouve avec 4593 POIs. C’est beau l’Auvergne Rhône Alpes et bien rempli de cols &amp; sommets !\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Comparer les POIs avec mes traces GPS\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Demander ses données Strava\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Comme je le disais en introduction, toutes mes traces d&rsquo;activités sportives sont sur Strava. Une aubaine car Strava propose de télécharger une archive contenant toutes ses informations.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dans : Paramètres -&gt; Mon compte -&gt; Télécharger ou supprimer le compte -&gt; Commencer -&gt; Demander une archive.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Au bout de quelques minutes, je reçois par mail une archive avec toutes mes données. L&rsquo;archive contient un dossier \u003Cem>activities\u003C\u002Fem> qui lui-même contient les fichiers de toutes mes activités. Etant donné que cela fait plusieurs années que j&rsquo;utilise Strava, j&rsquo;ai plusieurs années d&rsquo;activités. Je me suis servi du fichier \u003Cem>activities.csv\u003C\u002Fem> pour faire le trie et garder uniquement les fichiers de l&rsquo;année 2021.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J&rsquo;avais des fichiers (pas tous, c&rsquo;est assez curieux) compressé en gzip. Pour dézipper tous les fichiers gzippé :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>gunzip *.gz\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">J&rsquo;avais également des fichiers au format .fit. C&rsquo;est (encore!) un fichier compilé. J&rsquo;ai converti ça en .gpx (pour obtenir un fichier XML lisible sans passer par un package) à l&rsquo;aide du soft \u003Cem>gpsbabel\u003C\u002Fem>.\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sudo apt-get install gpsbabel\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>for file in *.fit; do \u003Cbr> &nbsp; &nbsp;if &#91; -f \"$file\" ]; then \u003Cbr> &nbsp; &nbsp; &nbsp;  gpsbabel -i garmin_fit -f $file -o gpx -F $file.gpx \u003Cbr> &nbsp; &nbsp;fi \u003Cbr>done\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Comparer ses traces avec les POIs\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il ne me restait plus qu&rsquo;à écrire un script qui lise mes fichiers GPX et regarde près de quel point je suis passé. J&rsquo;ai choisi de continuer en Python, et voici le code final :\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>#!\u002Fusr\u002Fbin\u002Fpython3\u003Cbr># coding: utf-8\u003Cbr>​\u003Cbr>from xml.dom import minidom\u003Cbr>from pymongo import MongoClient\u003Cbr>from haversine import haversine\u003Cbr>import csv\u003Cbr>import os\u003Cbr>​\u003Cbr>def extract(path, distanceAccepted):\u003Cbr> &nbsp; &nbsp;# 1. Extract all point of .gpx file &amp; date of first point\u003Cbr> &nbsp; &nbsp;gpxPoints = &#91;]\u003Cbr> &nbsp; &nbsp;xmldoc = minidom.parse(path)\u003Cbr>​\u003Cbr> &nbsp; &nbsp;date = xmldoc.getElementsByTagName('time')&#91;1].firstChild.nodeValue\u003Cbr>​\u003Cbr> &nbsp; &nbsp;for point in xmldoc.getElementsByTagName('trkpt'):\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;gpxPoints.append({\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'lat': float(point.attributes&#91;'lat'].value),\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'lon': float(point.attributes&#91;'lon'].value),\u003Cbr> &nbsp; &nbsp; &nbsp;  })\u003Cbr>​\u003Cbr> &nbsp; &nbsp;# 2. Search max point\u003Cbr> &nbsp; &nbsp;seq = &#91;x&#91;'lat'] for x in gpxPoints]\u003Cbr> &nbsp; &nbsp;maxlat = max(seq)\u003Cbr> &nbsp; &nbsp;minlat = min(seq)\u003Cbr>​\u003Cbr> &nbsp; &nbsp;seq = &#91;x&#91;'lon'] for x in gpxPoints]\u003Cbr> &nbsp; &nbsp;minlon = min(seq)\u003Cbr> &nbsp; &nbsp;maxlon = max(seq)\u003Cbr>​\u003Cbr> &nbsp; &nbsp;# 3. Get all POIs in this perimeters\u003Cbr> &nbsp; &nbsp;client = MongoClient(host=\"localhost\", port=27017)\u003Cbr> &nbsp; &nbsp;db = client.osm\u003Cbr>​\u003Cbr> &nbsp; &nbsp;pois = db.poi.find(\u003Cbr> &nbsp; &nbsp; &nbsp;  {\"coord.0\": {\"$gt\": float(minlat), \"$lt\": float(maxlat)},\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; \"coord.1\": {\"$gt\": float(minlon), \"$lt\": float(maxlon)}}\u003Cbr> &nbsp;  )\u003Cbr>​\u003Cbr> &nbsp; &nbsp;# 4. Compare points with OSM point\u003Cbr> &nbsp; &nbsp;for osmPoint in pois:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;mostNear = &#91;]\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;osmObject = (osmPoint&#91;'coord']&#91;0], osmPoint&#91;'coord']&#91;1])\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;for point in gpxPoints:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mostNear.append(haversine(osmObject, (point&#91;\"lat\"], point&#91;\"lon\"]), unit='m'))\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp;if mostNear and min(mostNear) &lt; distanceAccepted:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with open('results_'+str(distanceAccepted)+'m.csv', 'a') as file:\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writer = csv.writer(file)\u003Cbr> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writer.writerow(&#91;date, osmPoint&#91;\"name\"], str(round(min(mostNear), 0))])\u003Cbr>​\u003Cbr>for filename in os.listdir(\"activities\"):\u003Cbr> &nbsp; &nbsp;print(\"Treat \" + filename)\u003Cbr> &nbsp; &nbsp;extract(\".\u002Factivities\u002F\" + filename, 20)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Quelques explications du script :\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour chaque fichier présent dans le dossier \u003Cem>activities\u003C\u002Fem>, j&rsquo;appelle la fonction extract avec en paramètre le path du fichier ainsi que la distance en mètre maximum entre un POIs et la trace pour qu&rsquo;on considère que je suis passé par ce point.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">La fonction extract() est assez simple mais voici quelques explications. Je récupère chaque point (une latitude et une longitude) du fichier dans un tableau gpxPoints. Je récupère ensuite la latitude et la longitude maximal et minimal. Je requête ensuite la base de données qui contient tous les POIs de la région Rhône Alpes pour récupèrer tous les POIs situé entre ces latitudes et longitudes maximales\u002Fminimales. Je finis par comparer chaque POIs aux coordonnées de ma trace. La fonction haversine() permet de calculer la distance entre 2 points à partir de coordonnées géographique. Si un des points de ma trace c&rsquo;est trouvé à moins de X mètres du POIs, alors on ajoute la date, le nom du POIs et la plus petite distance entre lui et la trace dans un fichier CSV.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Note : j&rsquo;ai utilisé minidom plutôt que xml.etree.ElementTree car j&rsquo;ai longtemps galéré pour récupérer tous les élements trkpt du fichier .gpx jusqu&rsquo;à renoncer et opter pour minidom.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Resultat\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il ne reste plus qu&rsquo;à ouvrir le fichier .csv, trié par date et voilà le résultat :\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"377\" height=\"226\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fresultats-osm.png\" alt=\"\" class=\"wp-image-25\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fresultats-osm.png 377w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fresultats-osm-300x180.png 300w\" sizes=\"auto, (max-width: 377px) 100vw, 377px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Limitations\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Après avoir fait plusieurs essais, la distance maximum optimale pour déterminer qu&rsquo;on est passé par un POIs me semble être de 20m. Cela peut paraître énorme mais c&rsquo;est dû à deux facteurs :\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>la précision de nos GPS\u003C\u002Fli>\n\n\n\n\u003Cli>la précision des POIs\u003C\u002Fli>\n\u003C\u002Fol>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">L&rsquo;addition de ces deux facteurs donne lieu à pas mal d&rsquo;imprécision. Si l&rsquo;on prend le « col de la Cochette » où je suis passé plusieurs fois par exemple, on se demande où peut bien être ce col.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"451\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-1.png\" alt=\"Passage n°1 au col de la Cochette\" class=\"wp-image-13\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-1.png 788w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-1-300x172.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-1-768x440.png 768w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"789\" height=\"451\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-2.png\" alt=\"Passage n°2 au col de la Cochette\" class=\"wp-image-14\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-2.png 789w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-2-300x171.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-2-768x439.png 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"782\" height=\"453\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-3.png\" alt=\"Passage n°3 au col de la Cochette\" class=\"wp-image-15\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-3.png 782w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-3-300x174.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-osm-3-768x445.png 768w\" sizes=\"auto, (max-width: 782px) 100vw, 782px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Lorsque l&rsquo;on contribue au projet OSM pour placer des points ou tracer des chemins, on peut s&rsquo;aider de photographies satellites. Malheureusement, ce col est en pleine forêt.. Dur dur de placer le point avec précision.\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image size-full\">\u003Cimg loading=\"lazy\" decoding=\"async\" width=\"789\" height=\"509\" src=\"http:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-satellite.png\" alt=\"Col de la Cochette sur image satellite\" class=\"wp-image-16\" srcset=\"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-satellite.png 789w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-satellite-300x194.png 300w, https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fcol-cochette-satellite-768x495.png 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Il pourrait également être intéressant de rajouter lors de l&rsquo;extraction des POIs les entrées de grottes (tag natural avec pour valeur cave_entrance), les glaciers (tag natural ; valeur glacier) les lacs (tag natural ; valeur water) ou encore les croix (tag man_made ; valeur cross).\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Attention pour les lacs : j&rsquo;habite près du Lac du Bourget et il m&rsquo;arrive plusieurs fois dans la saison d&rsquo;aller courir au bord de celui-ci. Autant dire qu&rsquo;il risque de ressortir plusieurs fois dans le fichier. Mais c&rsquo;est le seul moyen pour détecter quand on est passé aux abords d&rsquo;un lac de montagne.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Pour finir, il y a certaines randonnées où l&rsquo;intérêt réside dans le chemin (chemin de l&rsquo;ancienne crémaillère du Revard par exemple) et aucun POIs n&rsquo;est rencontré. Les balades sur ces chemins ne pourront malheureusement pas ressortir dans le fichier final.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hormis ces petits aléas, je suis vraiment content de ce projet qui m&rsquo;a permis de découvrir un peu OpenStreetMap et c&rsquo;est vraiment le feu tant il y a de projets possibles autour des données cartographiques. J&rsquo;ai également pu contribuer en ajoutant quelques chemins et c&rsquo;est plutôt plaisant de les voir appaître dans les applications de tracé de parcours et de pouvoir s&rsquo;en servir.\u003C\u002Fp>\n",{"rendered":1076,"protected":20},"\u003Cp>Développement en Python d&rsquo;un petit script capable de détecter les cols et sommets franchis à partir de trace GPS.\u003C\u002Fp>\n",17,{"footnotes":26},[1080],7,[],[1083,14,34,35,36,37,38,1084],"post-59","category-python",{"self":1086,"collection":1091,"about":1093,"author":1095,"replies":1097,"version-history":1100,"predecessor-version":1103,"wp:featuredmedia":1107,"wp:attachment":1110,"wp:term":1113,"curies":1118},[1087],{"href":1088,"targetHints":1089},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F59",{"allow":1090},[46],[1092],{"href":49},[1094],{"href":52},[1096],{"embeddable":55,"href":56},[1098],{"embeddable":55,"href":1099},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=59",[1101],{"count":23,"href":1102},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F59\u002Frevisions",[1104],{"id":1105,"href":1106},60,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts\u002F59\u002Frevisions\u002F60",[1108],{"embeddable":55,"href":1109},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia\u002F17",[1111],{"href":1112},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fmedia?parent=59",[1114,1116],{"taxonomy":76,"embeddable":55,"href":1115},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories?post=59",{"taxonomy":79,"embeddable":55,"href":1117},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Ftags?post=59",[1119],{"name":83,"href":84,"templated":55},{"author":1121,"wp:featuredmedia":1131,"wp:term":1185},[1122],{"id":23,"name":88,"url":89,"description":26,"link":90,"slug":88,"avatar_urls":1123,"_links":1124},{"24":92,"48":93,"96":94},{"self":1125,"collection":1129},[1126],{"href":56,"targetHints":1127},{"allow":1128},[46],[1130],{"href":102},[1132],{"id":1077,"date":1133,"slug":1134,"type":107,"link":1135,"title":1136,"author":23,"featured_media":110,"caption":1137,"alt_text":26,"media_type":112,"mime_type":113,"media_details":1138,"source_url":1164,"_links":1167},"2026-07-06T15:26:42","connaitre-cols-sommets-franchis-python-openstreetmap","https:\u002F\u002Fcms.lcdev.fr\u002Fformulaire-elementor-wordpress-0-spam-avec-cette-methode\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap\u002F",{"rendered":1134},{"rendered":26},{"width":115,"height":116,"file":1139,"filesize":1140,"sizes":1141,"image_meta":1165},"2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap.png",108924,{"medium":1142,"large":1146,"thumbnail":1150,"medium_large":1154,"1536x1536":1158,"full":1162},{"file":1143,"width":122,"height":123,"filesize":1144,"mime_type":113,"source_url":1145},"connaitre-cols-sommets-franchis-python-openstreetmap-300x169.png",16858,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap-300x169.png",{"file":1147,"width":128,"height":129,"filesize":1148,"mime_type":113,"source_url":1149},"connaitre-cols-sommets-franchis-python-openstreetmap-1024x576.png",69926,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap-1024x576.png",{"file":1151,"width":134,"height":134,"filesize":1152,"mime_type":113,"source_url":1153},"connaitre-cols-sommets-franchis-python-openstreetmap-150x150.png",11781,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap-150x150.png",{"file":1155,"width":139,"height":140,"filesize":1156,"mime_type":113,"source_url":1157},"connaitre-cols-sommets-franchis-python-openstreetmap-768x432.png",48403,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap-768x432.png",{"file":1159,"width":145,"height":146,"filesize":1160,"mime_type":113,"source_url":1161},"connaitre-cols-sommets-franchis-python-openstreetmap-1536x864.png",106885,"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap-1536x864.png",{"file":1163,"width":115,"height":116,"mime_type":113,"source_url":1164},"connaitre-cols-sommets-franchis-python-openstreetmap.png","https:\u002F\u002Fcms.lcdev.fr\u002Fwp-content\u002Fuploads\u002F2026\u002F07\u002Fconnaitre-cols-sommets-franchis-python-openstreetmap.png",{"aperture":153,"credit":26,"camera":26,"caption":26,"created_timestamp":153,"copyright":26,"focal_length":153,"iso":153,"shutter_speed":153,"title":26,"orientation":153,"keywords":1166,"alt":26},[],{"self":1168,"collection":1172,"about":1174,"author":1176,"replies":1178,"wp:attached-to":1181,"curies":1183},[1169],{"href":1109,"targetHints":1170},{"allow":1171},[46],[1173],{"href":162},[1175],{"href":165},[1177],{"embeddable":55,"href":56},[1179],{"embeddable":55,"href":1180},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcomments?post=17",[1182],{"embeddable":55,"post_type":14,"id":30,"href":468},[1184],{"name":83,"href":84,"templated":55},[1186,1206],[1187],{"id":1080,"link":1188,"name":1189,"slug":1190,"taxonomy":76,"_links":1191},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Fpython\u002F","Python","python",{"self":1192,"collection":1197,"about":1199,"wp:post_type":1201,"curies":1204},[1193],{"href":1194,"targetHints":1195},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F7",{"allow":1196},[46],[1198],{"href":189},[1200],{"href":192},[1202],{"href":1203},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=7",[1205],{"name":83,"href":84,"templated":55},[],[1208,1223,1243,1258,1273,1288,1303],{"id":512,"count":657,"description":26,"link":620,"name":621,"slug":622,"taxonomy":76,"parent":110,"meta":1209,"_links":1210},[],{"self":1211,"collection":1215,"about":1217,"wp:post_type":1219,"curies":1221},[1212],{"href":626,"targetHints":1213},{"allow":1214},[46],[1216],{"href":189},[1218],{"href":192},[1220],{"href":635},[1222],{"name":83,"href":84,"templated":55},{"id":23,"count":110,"description":26,"link":1224,"name":1225,"slug":1226,"taxonomy":76,"parent":110,"meta":1227,"_links":1228},"https:\u002F\u002Fcms.lcdev.fr\u002Fcategory\u002Fnon-classe\u002F","Non classé","non-classe",[],{"self":1229,"collection":1234,"about":1236,"wp:post_type":1238,"curies":1241},[1230],{"href":1231,"targetHints":1232},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F1",{"allow":1233},[46],[1235],{"href":189},[1237],{"href":192},[1239],{"href":1240},"https:\u002F\u002Fcms.lcdev.fr\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=1",[1242],{"name":83,"href":84,"templated":55},{"id":365,"count":23,"description":26,"link":474,"name":475,"slug":476,"taxonomy":76,"parent":110,"meta":1244,"_links":1245},[],{"self":1246,"collection":1250,"about":1252,"wp:post_type":1254,"curies":1256},[1247],{"href":480,"targetHints":1248},{"allow":1249},[46],[1251],{"href":189},[1253],{"href":192},[1255],{"href":489},[1257],{"name":83,"href":84,"templated":55},{"id":1080,"count":23,"description":26,"link":1188,"name":1189,"slug":1190,"taxonomy":76,"parent":110,"meta":1259,"_links":1260},[],{"self":1261,"collection":1265,"about":1267,"wp:post_type":1269,"curies":1271},[1262],{"href":1194,"targetHints":1263},{"allow":1264},[46],[1266],{"href":189},[1268],{"href":192},[1270],{"href":1203},[1272],{"name":83,"href":84,"templated":55},{"id":218,"count":23,"description":26,"link":327,"name":328,"slug":329,"taxonomy":76,"parent":110,"meta":1274,"_links":1275},[],{"self":1276,"collection":1280,"about":1282,"wp:post_type":1284,"curies":1286},[1277],{"href":333,"targetHints":1278},{"allow":1279},[46],[1281],{"href":189},[1283],{"href":192},[1285],{"href":342},[1287],{"name":83,"href":84,"templated":55},{"id":30,"count":23,"description":26,"link":178,"name":179,"slug":180,"taxonomy":76,"parent":110,"meta":1289,"_links":1290},[],{"self":1291,"collection":1295,"about":1297,"wp:post_type":1299,"curies":1301},[1292],{"href":184,"targetHints":1293},{"allow":1294},[46],[1296],{"href":189},[1298],{"href":192},[1300],{"href":195},[1302],{"name":83,"href":84,"templated":55},{"id":657,"count":23,"description":26,"link":764,"name":765,"slug":766,"taxonomy":76,"parent":110,"meta":1304,"_links":1305},[],{"self":1306,"collection":1310,"about":1312,"wp:post_type":1314,"curies":1316},[1307],{"href":770,"targetHints":1308},{"allow":1309},[46],[1311],{"href":189},[1313],{"href":192},[1315],{"href":779},[1317],{"name":83,"href":84,"templated":55},1785314930007]