Créer un sitemap XML avec Python

Qu’est-ce qu’un sitemap XML ?

Un sitemap XML est un fichier qui vise à lister l’ensemble de vos urls importantes pour le SEO. Vous pouvez en créer plusieurs par thématique ou type de pages. Il existe certaines limitations concernant les sitemaps XML. Pour rappel, les voici :

  • un fichier peut lister jusqu’à 50.000 URL
  • un index de sitemaps peut lister jusqu’à 50.000 fichiers sitemaps (mais pas de fichier index de sitemaps)
  • vous pouvez envoyer jusqu’à 500 fichiers d’index de sitemaps pour chaque site
  • une fois décompressé (car vous pouvez l’envoyer compressé), le fichier ne doit pas dépasser 50 Mo (52 428 800 octets). Pour information, cette limite de 50 Mo date de novembre 2016, avant c’était 10 Mo

source : Webrankinfo

De nombreux outils permettent de générer des sitemaps XML mais ils souvent souvent limités ou peu flexibles. Je vous propose aujourd’hui de voir comment il est possible de créer un sitemap XML via Python.

Découvrez aussi notre article pour crawler des sitemaps avec R

Script Python pour créer un sitemap XML

Avant de mettre les main dans le code, assurez-vous d’avoir la liste de vos urls. Comment faire ? Pour récupérer la liste de vos urls, utilisez un crawler. Il en existe plusieurs sur le marché : screaming frog (gratuit jusqu’à 500 urls) ou encore seolyzer (gratuit jusqu’à 10 000 urls). Sinon si vous souhaitez le faire vous même voici un tuto pour crawler son votre site avec R et RCrawler.

Quian

Etapes n°1 : Chargez les librairies

import pandas as pd
import os
import datetime 
from jinja2 import Template
import gzip

Etapes n°2: Charger votre liste d’urls

list_of_urls = pd.read_csv('list_of_urls.csv', sep=";")
list_of_urls

Etapes n°3: Préparer le(s) fichier(s)

# Set-Up Maximum Number of URLs (recommended max 50,000)
n = 50000
 
# Create New Empty Row to Store the Splitted File Number
list_of_urls.loc[:,'name'] = ''
 
# Split the file with the maximum number of rows specified
new_df = [list_of_urls[i:i+n] for i in range(0,list_of_urls.shape[0],n)]
 
# For Each File Created, add a file number to a new column of the dataframe
for i,v in enumerate(new_df):
    v.loc[:,'name'] = str(v.iloc[0,1])+'_'+str(i)
    print(v)

Etapes n°4: Créer le template du / des fichier(s)

           
# Create a Sitemap Template to Populate
 
sitemap_template='''<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for page in pages %}
    <url>
        <loc>{{page[1]|safe}}</loc>
        <lastmod>{{page[3]}}</lastmod>
        <changefreq>{{page[4]}}</changefreq>
        <priority>{{page[5]}}</priority>        
    </url>
    {% endfor %}
</urlset>'''
 
template = Template(sitemap_template)
 
# Get Today's Date to add as Lastmod
lastmod_date = datetime.datetime.now().strftime('%Y-%m-%d')

Etapes n°5: Lancer la création de vos sitemaps

# Fill the Sitemap Template and Write File
for i in new_df:                           # For each URL in the list of URLs ...                                                          
    i.loc[:,'lastmod'] = lastmod_date      # ... add Lastmod date
    i.loc[:,'changefreq'] = 'daily'        # ... add changefreq
    i.loc[:,'priority'] = '1.0'            # ... add priority 
 
    # Render each row / column in the sitemap
    sitemap_output = template.render(pages = i.itertuples()) 
     
    # Create a filename for each sitemap like: sitemap_0.xml.gz, sitemap_1.xml.gz, etc.
    filename = 'sitemap' + str(i.iloc[0,1]) + '.xml.gz'
 
    # Write the File to Your Working Folder
    with gzip.open(filename, 'wt') as f:   
        f.write(sitemap_output)

Code complet  🤙

import pandas as pd
import os
import datetime 
from jinja2 import Template
import gzip
 
# Import List of URLs
list_of_urls = pd.read_csv('list_of_urls.csv')
list_of_urls
 
 
# Set-Up Maximum Number of URLs (recommended max 50,000)
n = 50000
 
# Create New Empty Row to Store the Splitted File Number
list_of_urls.loc[:,'name'] = ''
 
# Split the file with the maximum number of rows specified
new_df = [list_of_urls[i:i+n] for i in range(0,list_of_urls.shape[0],n)]
 
# For Each File Created, add a file number to a new column of the dataframe
for i,v in enumerate(new_df):
    v.loc[:,'name'] = str(v.iloc[0,1])+'_'+str(i)
    print(v)
             
# Create a Sitemap Template to Populate
 
sitemap_template='''<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for page in pages %}
    <url>
        <loc>{{page[1]|safe}}</loc>
        <lastmod>{{page[3]}}</lastmod>
        <changefreq>{{page[4]}}</changefreq>
        <priority>{{page[5]}}</priority>        
    </url>
    {% endfor %}
</urlset>'''
 
template = Template(sitemap_template)
 
# Get Today's Date to add as Lastmod
lastmod_date = datetime.datetime.now().strftime('%Y-%m-%d')
 
# Fill the Sitemap Template and Write File
for i in new_df:                           # For each URL in the list of URLs ...                                                          
    i.loc[:,'lastmod'] = lastmod_date      # ... add Lastmod date
    i.loc[:,'changefreq'] = 'daily'        # ... add changefreq
    i.loc[:,'priority'] = '1.0'            # ... add priority 
 
    # Render each row / column in the sitemap
    sitemap_output = template.render(pages = i.itertuples()) 
     
    # Create a filename for each sitemap like: sitemap_0.xml.gz, sitemap_1.xml.gz, etc.
    filename = 'sitemap' + str(i.iloc[0,1]) + '.xml.gz'
 
    # Write the File to Your Working Folder
    with gzip.open(filename, 'wt') as f:   
        f.write(sitemap_output)

0 commentaires

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Découvrez aussi …

Qu’est-ce le SEO et comment fonctionne t-il ?

Qu’est-ce le SEO et comment fonctionne t-il ?

Vous souhaitez comprendre ce qu'est le SEO et son fonctionnement ? Bonne nouvelle, vous êtes au bon endroit. Nous vous avons concocté un guide simple, concis et efficace pour mieux appréhender le SEO et ses enjeux.L'une des questions les plus fréquentes parmi nos...

Comment pousser Google à crawler vos sitemaps ?

Comment pousser Google à crawler vos sitemaps ?

Si vous êtes SEO, vous savez que les sitemaps XML sont importants pour le crawl et l'indexation de vos pages. Il existe plusieurs enjeux majeurs à travers les sitemaps XML : Les urls poussées dans les sitemaps doivent regroupées vos pages importantes d'un point de vue...

10 principes UX à connaître

10 principes UX à connaître

L'UX au service de votre site web Créer un site web n'est pas chose aisée. Cela exige un parfaite compréhension et analyse de la cible. Selon vous serez amener à adapter la navigation, le style ou encore le wording de votre site. Cependant, certaines règles restent...

How to create XML Sitemap with R

How to create XML Sitemap with R

XML sitemaps are must have when you want to make sure Google crawl your pages. To create XML sitemaps, it exists multiple free and paid solutions. Well, this article will show you how to create XML sitemaps for free with a simple R script. This method does not need to...