Maak een “SEO Friendly” Sitestructuur met Python!

Jorg van de Ven

7 Jun, 2021

Een sitestructuur is belangrijk voor zowel je bezoekers (UX) als voor zoekmachines (SEO). Met een goede sitestructuur kun je bezoekers meteen naar de juiste pagina’s sturen en laten converteren. Maar daarnaast stelt dit zoekmachines in staat om je pagina’s gemakkelijk te ‘crawlen’ en je te laten ranken op ‘long tail keywords’.  In dit artikel laat ik zien hoe je een “SEO friendly” sitestructuur maakt met Python.

Ventastic Clothing - Site Structure

Waarom is deze sitestructuur “SEO-Friendly”?

De sitestructuur die hier wordt gegenereerd is op basis van een piramidestructuur. Er is wordt uitgegaan van een hoofdcategorie waaronder meerdere subcategorieën vallen. Hieronder een voorbeeld:

example.com/hoofdcategorie/subcategorie1/subcategorie2

John Mueller, Search Advocate @ Google, adviseert het gebruik van een piramidestructuur. Het stelt zoekmachines in staat om pagina’s te vinden maar ook om de relatie tussen verschillende onderdelen van een website beter te begrijpen. Als Google een website beter begrijpt dan zal deze ook vaker vertoond worden aan de juiste zoekers in de zoekresultaten. Als hier ook de juiste zoekwoorden aan zijn gekoppeld dan wordt je zichtbaarheid aanzienlijk vergroot. Hieronder legt John Mueller het principe uit:

Wat levert deze SEO sitestructuur op?

Zodra het Python Script succesvol is uitgevoerd wordt het volgende aan je opgeleverd:

  • Een boomdiagram in Python
  • Een lijst met URL’s van alle mogelijke categorieën
  • Een visualisatie als PNG (zie bovenstaande afbeelding)

De output kan vervolgens worden gebruikt om een sitestructuur mee bouwen. De pagina’s fungeren ook perfect als landingspagina’s voor gebruikers met zeer specifieke zoekopdrachten (Long Tail Keywords). Denk bijvoorbeeld aan gebruikers die op zoek zijn naar een heren blouse van Calvin Klein.

Klik op de afbeelding om deze te vergroten.

Python Logo

Hoe bouw ik mijn eigen SEO sitestructuur met Python?

Het is aan te raden om te beginnen met het bepalen van de hoofdcategorieën op een website. Doe dit op basis van een zoekwoordonderzoek en het assortiment van het E-Commerce platform. Verkoop je kleding? Maak dan een onderscheidt tussen herenkleding, vrouwenkleding, unisexkleding etc. Verkoop je electronica? Kies dan voor een onderscheidt tussen computers, (mobiele) telefoons en televisies.

In dit artikel wordt de fictieve webshop Ventastic Clothing gebruikt.

Welke Python Libraries worden gebruikt?

Voor het sitestructuur script zijn maar enkele libraries nodig. Anytree en Pydot worden gebruikt om de structuur en de output te visualiseren. Pandas wordt gebruikt om alle URL’s in een Dataframe te zetten. Dit dataframe wordt vervolgens geëxporteerd naar een CSV bestand.

from anytree import Node, RenderTree
from anytree.dotexport import RenderTreeGraph
import pydot
import pandas as pd

Het invoeren van de hoofd- en subcategorieën

Geef in de variabele top_categories de hoofdcategorieën van de website aan. De variabele clothing_types laat de onderliggende categorieën zien die verbonden zijn aan de hoofdcategorieën (top_categories). Voer vervolgens de verschillende merken (brands) in. Deze wordt weer gekoppeld aan clothing_types.

Het is mogelijk om de categorieën van naam te veranderen. Mocht dit aan de orde zijn, pas dan ook de namen verderop in het script aan. Als dit niet gebeurt dan zal het script niet werken. Het is ook mogelijk om de variabele brands te vervangen door een andere categorie. Kies bijvoorbeeld voor ‘sizes’ met de waarden; Small, Medium, Large en Extra Large.

top_categories = ["Men's Clothing", "Women's Clothing", "Unisex Clothing", "Children's Clothing" ]

clothing_types = ['Shoes','Shirts', 'Jeans', 'Blouses', 'Sweaters', 'Jackets']

brands = ['Nike', 'Adidas', 'Björn Borg', 'Calvin Klein', 'Converse', 'Vans', 'Jack & Jones' ]

Het invoeren van de domeinnaam

In de variabele siteName staat het domein waarvoor de een piramidestructuur wordt gegenereerd. De variabele site gebruikt de siteName en zet deze bovenaan de piramide. Dit wordt de eerste node, het topje van de piramide.

siteName = 'ventastic-clothing.com'
site = Node(f'{siteName}')

Het genereren van de categorieën en URL’s

Door middel van een For Loop wordt er door ieder item van de variabele gelopen. Deze items worden vervolgens gekoppeld aan de bovenliggende node. In het geval van de eerste For Loop is dit de site node. Vervolgens wordt een URL opgebouwd op basis van een piramidestructuur. Het begint met de siteName (ventastic-clothing.com) en één van de categorieën (ventastic-clothing.com/mens-clothing). Eventuele spaties worden vervangen door een dash (-) en de apostrof wordt verwijderd.

De gegenereerde nodes en URL’s worden vervolgens opgeslagen in de level_data dictionary. Deze dictionary wordt vervolgens verstuurd naar de levels variabele en wordt later gebruikt in een DataFrame.

levels = []

for category in top_categories:
categoryNode = Node(f'{category}', parent=site)
categoryURL = f'{siteName}/{category}'.lower().replace(' ','-').replace("'", "")
for clothing in clothing_types: #Create Node for each category
clothingNode = Node(f'{clothing}', parent=categoryNode)

clothingURL = f'{siteName}/{category}/{clothing}'.lower().replace(' ','-')
for brand in brands:
brandNode = Node(f'{brand}', parent =clothingNode)
brandURL = f'{siteName}/{category}/{clothing}/{brand}'.lower().replace(' ','-')
level_data = {
'Clothing Category': category,
'Clothing Category URL': categoryURL,
'Clothing Type': clothing,
'Clothing Type URL': clothingURL,
'Brand': brand,
'Full URL': brandURL

}
levels.append(level_data)

Het genereren van de sitestructuur

Vervolgens worden de eerder verzamelede nodes gebruikt in het opbouwen van de sitestructuur. Deze wordt middels de onderstaande code gevisualiseerd in Python. De structuur wordt ook opgeslagen als PNG bestand.

for pre, fill, node in RenderTree(site):
    print("%s%s" % (pre, node.name))

print('\n<---- Generating Tree Diagram. Please wait ---->\n')

render = RenderTreeGraph(site).to_dotfile("tree.dot")

(graph,) = pydot.graph_from_dot_file('tree.dot')
graph.write_png(f'Site Structure - {siteName}.png')

print('\n<---- Tree Diagram saved! ---->\n')

Hieronder een visualisatie van de sitestructuur in PyCharm.

Klik op de afbeelding om deze te vergroten.

Generated Python Diagram

Hieronder de sitestructuur als PNG. De PNG wordt opgeslagen in dezelfde map als je huidige Python bestanden.

Klik op de afbeelding om deze te vergroten.

Ventastic Clothing - Site Structure

URL’s verwerken in een Pandas DataFrame 

De URL’s en categorieën die eerder zijn verzameld worden verwerkt in een Pandas DataFrame. Dit maakt het aantal URL’s overzichtelijk en het kan gemakkelijk geexporteerd worden als een CSV bestand.

print('\n<---- Generating Pandas DataFrame & CSV. Please wait ---->\n')
pd.set_option("display.max_rows", None, "display.max_columns", None)
df = pd.DataFrame(levels)
df.to_csv(f'data_{siteName}.csv')
print(df)
print('\n<---- Done! ---->\n')

Hieronder een lijst met URL’s die worden gegenereerd:

Klik op de afbeelding om deze te vergroten.

SEO Pyramid Structure - URL's

Je eigen Python SEO Sitestructuur bouwen?

Klaar om je eigen Sitestructuur te bouwen? Hieronder vind je de volledige Python code. Zorg ervoor dat je de juiste Python Libraries hebt geïnstalleerd voordat je hieraan begint. 

Heb je een vraag? Stel deze gerust in de comments of op LinkedIn! Succes!

Jorg van de Ven

Jorg van de Ven

Web Analyst / SEO Specialist

Als Web Analyst en SEO specialist houd ik me dagelijks bezig met technische vraagstukken.
Kan de Crawler deze pagina bereiken? Wordt de juiste data wel naar Google Analytics verstuurd? Daar kun je mij voor inschakelen!

Ik heb o.a. gewerkt voor: Trendhopper, Kwantum, Terre des Hommes, Expert, Hero en Startselect.

Heb je een vraag voor me? Stuur me een berichtje via LinkedIn of via mijn contactpagina.

0 Comments

Submit a Comment

Your email address will not be published.

Andere blogs die je wellicht interessant vindt: