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 …

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...

Crawler un site avec R & RCrawler

Crawler un site avec R & RCrawler

Possible de crawler sans budget ? Oui avec RCrawler ! Crawler et scraper des données est devenu une pratique incontournable pour les SEO depuis plusieurs années. Des solutions payantes existent comme par exemple Screaming Frog, Oncrawl, Botify ou encore Seolyzer. Pour...

Search Console : Comment récupérer les données avec R

Search Console : Comment récupérer les données avec R

Pour rappel, la Search Console est un outil à travers lequel les SEO s'appuient pour monitorer les performances des sites à travers différents metrics comme par exemple les clics, les impressions, les taux de clics, les positions, les keywords, (etc ...). En somme,...