Créer des pages SEO locales propres avec sitemap et maillage interne
Structurez des pages locales utiles pour cibler une ville et un service sans tomber dans le contenu dupliqué ou artificiel.
Sommaire
Créer des pages SEO locales propres avec sitemap et maillage interne
Les pages locales peuvent générer un trafic très qualifié: "développeur Laravel Arras", "développeur web Lille", "création site e-commerce Pas-de-Calais". Mais elles deviennent vite mauvaises si elles se contentent de remplacer un nom de ville dans le même texte.
Ce tutoriel montre une approche propre pour créer des pages locales utiles, indexables et reliées au reste du site. L'objectif n'est pas de produire cent pages faibles, mais quelques pages solides sur les zones où vous pouvez réellement intervenir.
Choisir les pages à créer
Commencez par croiser trois éléments:
- service réel: Laravel, WordPress, e-commerce, maintenance, audit;
- zone réelle: Arras, Achicourt, Lille, Paris, remote;
- intention de recherche: trouver un prestataire, comparer une compétence, demander un devis.
Une bonne page locale répond à une recherche précise:
- développeur web Arras;
- développeur Laravel Achicourt;
- freelance Laravel Lille;
- reprise projet WordPress Hauts-de-France.
Évitez les pages où vous n'avez rien à dire. Google n'a pas besoin d'une page "développeur Laravel village X" si le contenu est vide.
Donner un angle unique à chaque ville
Le piège classique: copier la page d'Arras et remplacer "Arras" par "Lille". À court terme c'est rapide. À long terme, c'est du contenu faible.
Pour chaque page, définissez un angle:
- Arras: proximité, PME locales, reprise de site, accompagnement direct;
- Lille: renfort technique, Laravel/Vue, agences, scale d'applications;
- Achicourt: recherche très locale, disponibilité autour d'Arras, maintenance;
- Paris: missions remote, renfort senior, reprise de projet.
La structure peut rester similaire, mais les exemples, les paragraphes et les liens doivent changer.
Structure HTML recommandée
Une page locale simple peut suivre ce plan:
<main>
<section>
<p>Développeur web freelance à Arras</p>
<h1>Développeur web à Arras pour sites Laravel, WordPress et e-commerce</h1>
<p>Expliquez la zone, les services et le type de clients.</p>
</section>
<section>
<h2>Services web proposés à Arras</h2>
<ul>
<li>Application Laravel sur mesure</li>
<li>Site WordPress maintenable</li>
<li>Audit et reprise de projet</li>
</ul>
</section>
<section>
<h2>Exemples de besoins fréquents</h2>
<p>Parlez de cas concrets, sans inventer de fausses références locales.</p>
</section>
</main>
Le H1 doit contenir l'intention principale, mais rester naturel. Le title SEO peut être plus court:
<title>Développeur web Arras - Laravel, WordPress, e-commerce</title>
Maillage interne
Une page locale isolée a peu de poids. Ajoutez des liens depuis:
- la page d'accueil;
- la page services;
- la page à propos;
- les pages de réalisations;
- d'autres pages locales pertinentes.
Exemple:
<p>
J'interviens aussi comme
<a href="/developpeur-web-lille.html">développeur web à Lille</a>
et pour des missions Laravel en remote.
</p>
Ne forcez pas dix liens dans chaque paragraphe. Trois à cinq liens utiles valent mieux qu'un bloc artificiel.
Sitemap généré
Si le site est statique, vous pouvez générer le sitemap à chaque déploiement. L'idée: parcourir les fichiers HTML publics et créer une entrée par URL.
import fs from 'node:fs';
import path from 'node:path';
const publicDir = './public';
const baseUrl = 'https://example.com';
function listHtmlFiles(dir) {
return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) return listHtmlFiles(full);
if (!entry.name.endsWith('.html')) return [];
return [full];
});
}
const urls = listHtmlFiles(publicDir).map((file) => {
const relative = file
.replace(publicDir, '')
.replace(/\\/g, '/')
.replace('/index.html', '/');
return `${baseUrl}${relative}`;
});
Ajoutez ensuite le XML:
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.map((url) => ` <url><loc>${url}</loc></url>`).join('\n')}
</urlset>`;
fs.writeFileSync('./public/sitemap.xml', xml);
Dans un pipeline GitLab, lancez ce script avant le déploiement pour que le sitemap reflète les pages réellement publiées.
Canonical et robots
Chaque page locale doit avoir une canonical claire:
<link rel="canonical" href="https://example.com/developpeur-web-arras.html">
<meta name="robots" content="index, follow">
Évitez les canonical vers la page d'accueil. Si la page locale mérite d'exister, elle mérite sa propre canonical.
Données structurées
Pour un freelance, le schema Person ou ProfessionalService peut aider à clarifier le contexte. Restez sobre:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Développeur web freelance",
"areaServed": ["Arras", "Lille", "Hauts-de-France"],
"serviceType": ["Laravel", "WordPress", "E-commerce"]
}
</script>
Ne mettez pas une adresse fictive. Ne promettez pas une présence physique si vous travaillez surtout en remote.
Éviter le contenu dupliqué
Une page locale doit contenir au moins:
- un H1 unique;
- une meta description unique;
- deux ou trois paragraphes adaptés à la ville;
- des liens internes différents;
- un appel à l'action cohérent;
- éventuellement une FAQ spécifique.
Si vous ne pouvez pas écrire cela naturellement, regroupez plutôt les zones dans une page régionale.
Contrôle avant publication
Avant de déployer:
- vérifiez que la page est dans le sitemap;
- testez un HTTP 200;
- contrôlez la canonical;
- vérifiez que les liens internes ne pointent pas vers une 404;
- relisez le contenu à voix haute: si la ville sonne collée artificiellement, réécrivez.
Conclusion
Le SEO local fonctionne quand il reflète une vraie capacité à servir une zone et un besoin. Les pages locales doivent aider un prospect à comprendre rapidement si vous êtes la bonne personne.
Un petit nombre de pages propres, bien reliées et mises dans le sitemap vaut mieux qu'une grande quantité de pages interchangeables. C'est aussi plus durable: vous pouvez les enrichir avec des réalisations, des tutoriels et des exemples concrets au fil du temps.