Joomla breadcrumbs instellen
Het kruimelpad ("breadcrumbs") lijkt op het eerste gezicht het eenvoudigste onderdeel van een Joomla-pagina: een klein spoor van links bovenaan met de tekst Home / Nieuws / Joomla 6 uitgebracht. Toch is dat kleine spoor opgebouwd uit de menustructuur, het actieve menu-item en soms de component die je op dat moment bekijkt. Als je eenmaal begrijpt hoe Joomla dit samenstelt, kun je een defect kruimelpad repareren, ze correct opmaken en er echte SEO-waarde uit halen.
In dit artikel wordt uitgelegd hoe het kruimelpad ("breadcrumbs") in Joomla precies werkt. Het behandelt de basisprincipes voor website eigenaren en redacteuren, de praktische instellingen voor beheerders en de technische details voor ontwikkelaars. Je leert wat het ‘Pathway’ is, hoe de Breadcrumbs-module dit omzet in een zichtbaar spoor, hoe componenten hun eigen stappen toevoegen, hoe het spoor wordt omgezet in gestructureerde gegevens voor zoekmachines en hoe je veelgemaakte fouten kunt vermijden.
Breadcrumbs zijn geen instelling die je invoert. Ze geven in realtime weer waar de huidige pagina zich in je menustructuur bevindt.
Het doel is simpel: je helpen breadcrumbs goed genoeg te begrijpen om ze met vertrouwen te kunnen gebruiken.
1. De basis
1.1 Wat is een breadcrumb-spoor?
Een breadcrumb-spoor is een rij links die het pad toont van de homepage tot aan de pagina die een bezoeker bekijkt. Het ziet er meestal zo uit:
Home → Producten → Laptops → ThinkPad X1
Elke stap behalve de laatste is een link. De laatste stap is de huidige pagina en is daarom normaal gesproken platte tekst. De naam komt uit het sprookje: een spoor van kruimels dat de weg terug wijst.
1.2 Waarom breadcrumbs belangrijk zijn
Breadcrumbs doen drie nuttige dingen tegelijk:
- Oriëntatie: bezoekers zien waar ze zich in de sitestructuur bevinden.
- Navigatie: bezoekers kunnen met een klik terug naar elk bovenliggend niveau.
- SEO: zoekmachines lezen het spoor, tonen het in de resultaten en begrijpen je sitehiërarchie.
1.3 Waar komen breadcrumbs in Joomla vandaan?
Dit is het deel dat nieuwkomers missen. In Joomla schrijf je het spoor niet met de hand. Joomla houdt een intern object bij dat het Pathway heet. Het Pathway wordt automatisch gevuld:
- Het actieve menu-item en de bovenliggende menu-items vormen de basis van het spoor.
- De component die je bekijkt (bijvoorbeeld een artikel) kan meer stappen toevoegen, zoals de categorie en de artikeltitel.
Een aparte module, mod_breadcrumbs, leest het Pathway en toont het als een zichtbaar spoor. Geen module betekent geen zichtbare breadcrumbs, ook al bestaat het Pathway nog steeds.
Het Pathway is de data. De Breadcrumbs-module is de weergave.
1.4 De anatomie van een breadcrumb-spoor
Een weergegeven spoor in Joomla 6 heeft deze onderdelen:
| Onderdeel | Wat het is |
|---|---|
| Label "Je bent hier:" | Een optioneel voorvoegsel voor het spoor. |
| Home-kruimel | Een optionele eerste link naar de homepage van de site. |
| Tussenliggende kruimels | Een link per bovenliggend menu-item of categorie, elk klikbaar. |
| Laatste kruimel | De huidige pagina, getoond als platte tekst (optioneel). |
2. Breadcrumbs op je site tonen
2.1 Publiceer de Breadcrumbs-module
Breadcrumbs verschijnen pas als je de Breadcrumbs-module publiceert. Om hem toe te voegen ga je naar:
Systeem → Sitemodules → Nieuw → Breadcrumbs
Stel daarna drie dingen in:
- Titel: bijvoorbeeld "Breadcrumbs". Je kunt de titel op de frontend verbergen.
- Positie: kies een templatepositie boven de inhoud, zoals
breadcrumbsin het standaard Cassiopeia-template. - Status: zet deze op Gepubliceerd.
2.2 Kies waar hij verschijnt
Net als elke module heeft de Breadcrumbs-module een tabblad Menutoewijzing. Daar bepaal je waar het spoor verschijnt:
- Op alle pagina's (de gebruikelijke keuze).
- Op alle pagina's behalve de homepage (heel gebruikelijk, want een spoor op de homepage heeft geen zin).
- Alleen op geselecteerde pagina's.
Een nette standaard is "Op alle pagina's" gecombineerd met het verbergen van de Home-kruimel, of "Alle pagina's behalve Home".
2.3 Controleer of de templatepositie bestaat
Als je de module publiceert maar niets ziet, bestaat de gekozen positie misschien niet in je template. Je kunt posities bekijken door Modulepositie voorbeeld in te schakelen bij de Templates opties en daarna ?tp=1 aan een frontend-URL toe te voegen (spoiler: je kunt er alles achter typen behalve 0, ?tp=peter werkt ook!). Het Cassiopeia-template heeft een speciale breadcrumbs-positie voor precies dit doel.
3. De module-opties uitgelegd
De Breadcrumbs-module heeft een kleine maar belangrijke set opties. Elke optie verwijst rechtstreeks naar een parameter in de moduleconfiguratie.
3.1 Basisopties
| Optie | Parameter | Wat het doet |
|---|---|---|
| "Je bent hier" | showHere |
Toont het label "Je bent hier:" voor het spoor. Als dit uit staat, toont Joomla in plaats daarvan een klein locatie-icoon. |
| Home | showHome |
Voegt de Home-link toe als eerste kruimel. |
| Tekst voor Home-item | homeText |
Overschrijft het woord "Home". Laat het leeg om de standaard uit het taalbestand te gebruiken. |
| Laatste | showLast |
Toont de huidige pagina als laatste kruimel. Zet het uit om het spoor bij de bovenliggende pagina te laten eindigen. |
3.2 Geavanceerde opties
| Optie | Parameter | Wat het doet |
|---|---|---|
| Lay-out | layout |
Selecteert een lay-outbestand, inclusief een bestand uit een sjabloonoverride. |
| Achtervoegsel moduleklasse | moduleclass_sfx |
Voegt een CSS-klasse toe aan de buitenste wrapper van de module, de module-chrome. De lay-out zelf geeft deze niet weer. In Cassiopeia wordt voor de positie breadcrumbs de stijl none gebruikt, dus de klasse verschijnt alleen als je ook een modulestijl kiest op het tabblad ‘Geavanceerd’. |
| Caching | cache |
Gebruik ‘Globaal’ of ‘Geen caching’. De standaardinstelling is Geen caching. |
| Cachetijd | cache_time |
Hoe lang, in seconden, de gecachete uitvoer moet worden bewaard. |
Er is ook een verborgen parameter, cachemode, vast ingesteld op itemid. Wanneer caching is ingeschakeld, slaat Joomla één versie van het spoor per menu-item op, niet per URL. Daardoor kan het verkeerde spoor worden weergegeven voor artikelen die een menu-item delen, dus is het meestal het beste om caching uitgeschakeld te laten. Zie paragraaf 13 voor de details.
3.3 De "Laatste tonen"-truc
Veel ontwerpers zetten showLast uit. De huidige pagina heeft al een <h1>-kop, dus het herhalen van de titel in het spoor kan overbodig aanvoelen. Uitzetten laat het spoor bij de laatste bovenliggende pagina eindigen. Het is een kwestie van smaak, maar het houdt het spoor korter.
4. Hoe het spoor wordt opgebouwd: het Pathway
4.1 Het Pathway-object
Achter elke frontend-pagina bewaart Joomla een Pathway-object. Dit is een eenvoudige lijst. Elk item heeft twee velden:
naam -- het zichtbare label van de broodkruimel
link -- de interne URL waarnaar de broodkruimel verwijst, bijv. index.php?option=...&Itemid=...
(leeg voor koppen, scheidingstekens en broodkruimels die zonder link zijn toegevoegd)
De link wordt opgeslagen als een niet-SEF interne URL. De Breadcrumbs-module zet deze om in een SEF-URL wanneer het spoor wordt weergegeven.
De laatste kruimel wordt altijd als platte tekst weergegeven, ongeacht of deze een link bevat. Wanneer de huidige pagina een menu-item is, bevat de bijbehorende kruimel nog steeds een link in de Pathway: alleen de lay-out laat deze weg. Wanneer een component de huidige pagina zelf toevoegt, zoals een artikeltitel, is de link meestal leeg.
De klasse bevindt zich in Joomla\CMS\Pathway\Pathway, en de frontend gebruikt de subklasse Joomla\CMS\Pathway\SitePathway. Je bereikt de actieve instantie vanuit de applicatie:
$pathway = $app->getPathway();
4.2 De menustructuur vult de basis
Wanneer een pagina wordt geladen, kijkt Joomla naar het actieve menu-item. Elk menu-item kent zijn voorouders via een tree-eigenschap: de keten van bovenliggende items, van boven naar beneden tot aan het item zelf. SitePathway doorloopt die boomstructuur en voegt één broodkruimel toe per menu-item daarin, inclusief het actieve item zelf. Elke broodkruimel gebruikt de titel van het menu-item als label.
Een belangrijk detail: als het actieve item de startpagina is, voegt Joomla niets toe. De trail-body blijft leeg en alleen de optionele ‘Home’-broodkruimel uit de module blijft over.
Op andere pagina’s verschijnt het ‘Home’-item normaal gesproken niet in het navigatiepad, omdat het meestal een item op het hoogste niveau is en geen bovenliggend item van andere items. Als u wel menu-items onder het ‘Home’-item plaatst, wordt het ‘Home’-item onderdeel van hun boomstructuur en verschijnt het als een navigatiekruimel. De standaardlay-out verwijdert het dan wanneer het direct volgt op de ‘Home’-navigatiekruimel, zodat het navigatiepad niet ‘Home → Home’ weergeeft.
4.3 Bijzondere menu-itemtypen
Niet elk menu-item wordt een klikbare kruimel. SitePathway behandelt sommige typen anders:
| Menu-itemtype | Gedrag van de kruimel |
|---|---|
| Scheidingsteken | Getoond als label, geen link. |
| Kop | Getoond als label, geen link. |
| URL | Gelinkt. Joomla voegt de Itemid toe voor interne links. |
| Alias | Gelinkt naar het gealiaste item via de parameter aliasoptions. |
| Component | Gelinkt, met de Itemid erachter. |
Daarom verschijnt een Kop die als dropdown-ouder wordt gebruikt in het spoor als platte tekst: hij heeft geen echte pagina om naar te linken.
Naar boven5. Hoe componenten het spoor uitbreiden
5.1 De menustructuur is slechts het begin
De menustructuur geeft het basisspoor, maar stopt bij het menu-item. Een menu-item van het type Enkel artikel weet bijvoorbeeld niet welk artikel je opende vanuit een categorieblog. Daarom voegen componenten tijdens de uitvoering hun eigen kruimels toe.
5.2 Artikelen: categorie- en titelbroodkruimels toevoegen
Wanneer je een artikel opent dat niet rechtstreeks aan een eigen menu-item is gekoppeld, vult de component Artikelen (com_content) de ontbrekende stappen aan. De component begint bij het artikel en werkt de categoriebomen omhoog, waarbij elke categorie als een broodkruimel wordt toegevoegd, totdat de categorie van het actieve menu-item is bereikt. In de code doet de artikelweergave dit:
$pathway = $app->getPathway();
$path = [[‘title’ => $this->item->title, ‘link’ => ‘’]];
$category = Categories::getInstance(‘Content’)->get($this->item->catid);
while ($category !== null && $category->id != $id && $category->id !== ‘root’) {
$path[] = [‘title’ => $category->title, ‘link’ => RouteHelper::getCategoryRoute($category->id, $category->language)];
$category = $category->getParent();
}
$path = array_reverse($path);
foreach ($path as $item) {
$pathway->addItem($item[‘title’], $item[‘link’]);
}
Hier is $id de categorie van het actieve menu-item, maar alleen als dat menu-item een categorie (blog of lijst) of een menu-item van het type ‘Categorieën’ is. Voor elk ander type menu-item is $id gelijk aan 0, en voegt Joomla het volledige categoriepad van het artikel toe, tot aan het hoogste niveau.
Voorbeeld: een categorie-blogmenu-item “Nieuws” toont de categorie Nieuws. Een artikel in Nieuws → Producten → Laptops krijgt dan dit pad, ook al is alleen “Nieuws” een echt menu-item:
Home → Nieuws → Producten → Laptops → ThinkPad X1
De laatste kruimel is de titel van het artikel. Deze wordt zonder link toegevoegd, omdat het de huidige pagina is.
5.3 Waarom dit belangrijk is voor je inhoud
Omdat componenten het gat opvullen van het menu-item tot aan de inhoud, hangt de kwaliteit van je spoor van twee dingen af:
- Een nette categorieboom, want artikel-breadcrumbs volgen de bovenliggende categorieën.
- Een juiste Itemid, want het beginpunt (het menu-item) bepaalt waar het componentspoor begint.
Als Joomla de verkeerde Itemid raadt, kan het spoor in de verkeerde tak beginnen. Dit is veruit de meest voorkomende oorzaak van "rare breadcrumbs".
6. Breadcrumbs en de Itemid
6.1 De Itemid bepaalt het startpunt
Elke frontend-pagina is via de parameter Itemid aan een menu-item gekoppeld. De Pathway gebruikt het actieve menu-item als basis, dus de Itemid bepaalt rechtstreeks:
- Welke menu-items als navigatietraject worden weergegeven: het actieve menu-item en de bovenliggende items.
- Waar het componenttraject begint.
- Of het pad leeg blijft. Bij het menu-item ‘Home’ voegt Joomla helemaal geen menukruimels toe. De ‘Home’-kruimel zelf verschijnt nog steeds als de optie Home (
showHome) is ingeschakeld, omdat de module deze toevoegt, niet het pad.
6.2 Wat er misgaat zonder een duidelijke Itemid
Als een link naar een artikel geen Itemid heeft, raadt de router van Joomla er een. Een verkeerde gok geeft:
- Een spoor dat in de verkeerde menutak begint.
- Ontbrekende of dubbele kruimels.
- Een ander spoor voor hetzelfde artikel, bereikt vanaf twee plekken.
6.3 Hoe je het inspecteert
Voordat SEF-herschrijving hem verbergt, is de Itemid het laatste getal in de query string:
index.php?option=com_content&view=article&id=42&Itemid=123
Als een breadcrumb-spoor er verkeerd uitziet, controleer dan eerst de Itemid. De oplossing is meestal om naar de inhoud te linken via het juiste menu-item, of om een eigen menu-item voor die pagina te maken.
7. Van URL naar breadcrumb: de volledige pijplijn
7.1 Het verzoekproces, stap voor stap
Een broodkruimelpad is de laatste stap van een langer proces. Wanneer een bezoeker een pagina opent, doorloopt Joomla grofweg de volgende stappen:
- De SiteRouter ontvangt de verzoek-URL, bijvoorbeeld
/news/products/laptops. - De router parseert de URL en bepaalt de
Itemid, die het actieve menu-item vaststelt. - De eerste keer dat iets om het pad vraagt, meestal de component, maakt Joomla
SitePathwayaan. Het bouwt het basispad op door deboomstructuurvan het actieve menu-item te doorlopen: de bovenliggende items plus het item zelf. Bij het menu-item ‘Home’ voegt het niets toe. - De bijbehorende component wordt uitgevoerd. Indien nodig roept deze
addItem()aan om diepere breadcrumbs toe te voegen, zoals de categorieketen en de titel van het artikel. - De sjabloon geeft de moduleposities weer. mod_breadcrumbs vraagt de helper om de voltooide lijst en voegt, indien ingeschakeld, de Home-breadcrumb toe aan het begin.
- De lay-out geeft het pad weer als een geordende lijst en voegt de gestructureerde gegevens van schema.org als JSON-LD toe aan de pagina.
Dit is de reden waarom breadcrumbs zo sterk afhankelijk zijn van routing en menuconfiguratie. De module zelf doet bijna niets: tegen de tijd dat deze wordt uitgevoerd, is het pad al vastgelegd.
7.2 De volgorde in één oogopslag
Dezelfde stroom als in een diagram, vanaf het verzoek van de browser tot aan de HTML:
Browservraag
↓
SiteRouter bepaalt de Itemid en het actieve menu-item
↓
SitePathway voegt het actieve menu-item en de bovenliggende items toe als broodkruimels
(niets bij het menu-item ‘Home’)
↓
Component addItem() voor broodkruimels van categorieën en artikelen
↓
Plug-ins onAfterDispatch: optionele extra broodkruimels
↓
mod_breadcrumbs leest de Pathway, voegt de ‘Home’-broodkruimel toe aan het begin
↓
Layout (standaard) geeft de lijst en de schema.org JSON-LD weer
↓
HTML op de pagina
7.3 Waarom de volgorde belangrijk is
Elke stap kan alleen werken met wat de eerdere stappen hebben opgeleverd. Een verkeerde Itemid in stap 2 stuurt de rest van de keten de verkeerde tak in. Een component die in stap 4 vergeet addItem() aan te roepen, laat de diepe kruimels weg. Begin bij het oplossen van problemen bovenaan deze lijst en werk omlaag: eerst de router, als laatste de module.
8. Onder de motorkap (ontwikkelaarsweergave)
8.1 De Pathway-API
Het Pathway biedt een kleine, stabiele API. Je kunt het spoor lezen of wijzigen vanuit een plugin of een eigen component:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$pathway = $app->getPathway();
// Lezen
$items = $pathway->getPathway(); // array van objecten met name + link
$names = $pathway->getPathwayNames(); // array met alleen de namen
// Schrijven
$pathway->addItem('Downloads', 'index.php?option=com_downloads&view=list&Itemid=55');
$pathway->setItemName(2, 'Hernoemde kruimel');
$pathway->setPathway($newArrayOfItems); // vervang het hele spoor
Elk item is een eenvoudige stdClass met een name en een link. Een lege link betekent dat de kruimel als tekst wordt weergegeven, niet als hyperlink.
8.2 Waar SitePathway de basis opbouwt
De frontend-subklasse Joomla\CMS\Pathway\SitePathway bouwt het basisspoor op in zijn constructor. Hij leest het actieve menu-item, slaat het home-item over en doorloopt de tree-eigenschap, waarbij hij per itemtype een link kiest (scheidingsteken, kop, url, alias of component). Alles daarna wordt door componenten toegevoegd via addItem().
8.3 Een voorbeeld van een plug-in
Een systeemplug-in kan het navigatiepad aanpassen nadat de component zijn eigen broodkruimels heeft toegevoegd. Gebruik daarvoor de gebeurtenis onAfterDispatch: deze wordt uitgevoerd nadat de component is uitgevoerd en voordat de sjabloon de modules weergeeft. In Joomla 6 schrijft een plug-in zich in voor gebeurtenissen via SubscriberInterface:
use Joomla\CMS\Event\Application\AfterDispatchEvent;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Event\SubscriberInterface;
final class SpecialOffer extends CMSPlugin implements SubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [‘onAfterDispatch’ => ‘onAfterDispatch’];
}
public function onAfterDispatch(AfterDispatchEvent $event): void
{
$app = $event->getApplication();
if (!$app->isClient(‘site’)) {
return;
}
$app->getPathway()->addItem(‘Special Offer’, ‘’);
}
}
Let goed op de timing. Bij onAfterRoute is de component nog niet uitgevoerd, dus een crumb die je daar toevoegt, komt vóór de crumbs van de component terecht, midden in het pad. Om een crumb op een specifieke plaats in te voegen, lees je de lijst met getPathway(), wijzig je de array en schrijf je deze terug met setPathway().
Zo voegen extensies van derden hun eigen crumbs in zonder de kernbestanden aan te raken.
8.4 Er is geen breadcrumbs-tabel
Het spoor wordt nooit opgeslagen. Het wordt bij elke aanvraag opnieuw opgebouwd uit de live menustructuur en de huidige inhoud. Breadcrumbs hebben daarom geen eigen databasetabel. In plaats daarvan leunt de module op een handvol kerntabellen. De volgende paragrafen noemen de tabellen die ertoe doen.
8.5 De #__menu-tabel
Dit is de belangrijkste tabel, omdat deze de menustructuur bevat die de basis vormt van elk parcours. De relevante kolommen zijn:
id -- ID van het menu-item, gebruikt als Itemid
title -- de titel van het menu-item, gebruikt als het crumb-label
parent_id -- het bovenliggende menu-item
level -- diepte in de boomstructuur
lft, rgt -- grenzen van het Nested Set Model
path -- het aliaspad (ouder/kind/kleinkind)
alias -- het URL-segment
type -- component | url | alias | separator | heading
component_id -- de gekoppelde component
link -- de onderliggende query index.php?option=...
home -- markeert het standaard (home) menu-item, per taal
published, access, language
-- alleen gepubliceerde items die de bezoeker mag zien, worden gebruikt
Joomla voert niet voor elke crumb een query uit op deze tabel. Bij elk frontend-verzoek laadt het alle gepubliceerde menu-items van de site in één query, gesorteerd op lft. Het slaat die lijst op in de cache wanneer caching is ingeschakeld. Vervolgens bouwt het de boom van elk item (de keten van bovenliggende ID’s tot aan het item zelf) op in PHP, op basis van parent_id.
De kolommen lft en rgt implementeren het Nested Set Model. Sorteren op lft garandeert dat elke bovenliggende het item vóór zijn onderliggende items komt, zodat elk item eenvoudig de boom van zijn bovenliggende item kan kopiëren en zijn eigen id kan toevoegen. Het broodkruimelspoor hoeft vervolgens alleen maar die kant-en-klare boom te doorlopen, en daarom gaat het opbouwen ervan zo snel.
De kolommen lft en rgt implementeren het Nested Set Model. Het bereik van een ouder omvat altijd zijn kinderen, zodat Joomla een hele tak voorouders in een query kan ophalen, zonder recursie. Dat maakt het opbouwen van het spoor uit de menuboom snel.
8.6 De tabellen #__modules en #__modules_menu
De Breadcrumbs-module zelf is een gewone module, dus zijn configuratie staat in #__modules:
| Kolom | Wat het bevat |
|---|---|
title |
De moduletitel. |
position |
De templatepositie waarin hij rendert. |
params |
Een JSON-blob met de opties (showHome, showLast, enzovoort). |
published, access, language |
Status, toegangsniveau en taal. |
De bijbehorende tabel #__modules_menu koppelt elke module aan de menu-items waarop hij verschijnt. Voor breadcrumbs is dit wat je keuze bij Menutoewijzing wegschrijft:
moduleid -- welke module
menuid -- welk menu-item (Itemid)
positief = "toon op dit item"
negatief = "toon op alle behalve deze items"
0 = "alle pagina's"
Dus "Alle pagina's behalve Home" wordt hier opgeslagen als een negatieve rij voor het home-menu-item.
8.7 Ondersteunende tabellen
#__extensions: registreertmod_breadcrumbsals een geïnstalleerde extensie. Bij het laden van modules gebruikt Joomla alleen modules waarvan de extensie hier is ingeschakeld. De instellingen van de module worden hier niet opgeslagen: deze staan in de kolomparamsvan#__modules, en de standaardinstellingen komen uit het XML-bestand van de module.#__viewlevels: definieert de toegangsniveaus (Openbaar, Geregistreerd, enzovoort). De kolomaccessin#__modulesverwijst hier naar een niveau. Joomla laadt de Breadcrumbs-module alleen voor bezoekers die dat toegangsniveau hebben.#__assets: bevat de ACL-toegangsregels, zoals wie de module in de back-end mag bewerken, verwijderen of de status ervan mag wijzigen. Deze regels bepalen niet wie de module op de frontend ziet.
Geen van deze slaat het navigatiepad zelf op. Samen beschrijven ze de menustructuur, de module en wie deze mag zien, en Joomla bouwt op basis daarvan bij elk verzoek de breadcrumbs opnieuw op.
Naar boven9. De module-helper en het renderen
9.1 Van Pathway naar HTML
De Breadcrumbs-module zet het Pathway om in HTML in drie stappen:
- De module-Dispatcher vraagt de helper om de lijst met kruimels.
- De BreadcrumbsHelper leest het Pathway en plaatst, als
showHomeaan staat, de Home-kruimel ervoor. - Het layoutbestand (
tmpl/default.php) rendert de lijst als een geordende lijst met links.
9.2 De moderne helper-aanroep
In Joomla 6 is de helper een normale service, geen statische aanroep. De moderne manier om de kruimels op te halen is:
$crumbs = Factory::getApplication()
->bootModule('mod_breadcrumbs', 'site')
->getHelper('BreadcrumbsHelper')
->getBreadcrumbs($params, Factory::getApplication());
De oude statische methoden BreadcrumbsHelper::getList() en getHome() bestaan nog, maar zijn sinds 4.4.0 afgekeurd en worden in Joomla 7.0 verwijderd. Nieuwe code moet de instantiemethoden getBreadcrumbs() en getHomeItem() gebruiken.
9.3 De logica achter de navigatiebroodkruimel op de startpagina
De helpermethode getHomeItem() stelt de navigatiebroodkruimel op de startpagina samen op basis van het standaardmenu-item. Op een meertalige site wordt het standaardmenu-item van de huidige taal gebruikt:
if (Multilanguage::isEnabled()) {
$home = $menu->getDefault($app->getLanguage()->getTag());
} else {
$home = $menu->getDefault();
}
$item->name = htmlspecialchars($params->get(‘homeText’, $app->getLanguage()->_(‘MOD_BREADCRUMBS_HOME’)), ENT_COMPAT, ‘UTF-8’);
$item->link = $home->link . ‘&Itemid=’ . $home->id;
Als homeText leeg is, wordt het label overgenomen uit de taalstring MOD_BREADCRUMBS_HOME, zodat “Home” automatisch wordt vertaald.
Als showHome is ingeschakeld, plaatst de helper dit item bovenaan de lijst. Als showHome is uitgeschakeld, roept de Dispatcher van de module nog steeds getHomeItem() aan en geeft het resultaat door aan de lay-out als een fallback $homeCrumb. De lay-out gebruikt dit alleen voor de gestructureerde gegevens (zie het gedeelte over SEO). Op die manier kan het navigatiepad de Home-link visueel verbergen, terwijl deze in de machinaal leesbare gegevens behouden blijft.
10. Template-overrides en styling
10.1 De standaardopmaak
De standaardlay-out van Joomla 6 genereert semantische, toegankelijke opmaak op basis van Bootstrap-klassen. Met de standaardinstellingen (“U bent hier” ingeschakeld, Startpagina ingeschakeld, Laatste ingeschakeld) ziet een kort navigatiepad er als volgt uit:
<nav class="mod-breadcrumbs__wrapper" aria-label=“Breadcrumbs”>
<ol class="mod-breadcrumbs breadcrumb px-3 py-2">
<li class="mod-breadcrumbs__here float-start">
U bent hier:  
</li>
<li class="mod-breadcrumbs__item breadcrumb-item">
<a href="/" class="pathway"><span>Home</span></a>
</li>
<li class="mod-breadcrumbs__item breadcrumb-item active">
<span>Huidige pagina</span>
</li>
</ol>
</nav>
Wanneer “U bent hier” is uitgeschakeld, krijgt de eerste <li> in plaats daarvan de klasse mod-breadcrumbs__divider en bevat deze een locatiepictogram in plaats van de tekst.
De <nav>-wrapper met een aria-label geeft aan schermlezers door dat dit een navigatie-oriëntatiepunt is. De aria-label is de moduletitel, dus “Breadcrumbs” hierboven is gewoon de titel van deze voorbeeldmodule. Geef de module een duidelijke titel, zelfs als je deze op de frontend verbergt.
Het laatste navigatie-element krijgt de active-klasse. Als je een nog duidelijker signaal voor toegankelijkheid wilt, kun je via een override aria-current=“page” aan het laatste navigatie-element toevoegen.
10.2 Een override maken
Bewerk om de markup te wijzigen nooit de module. Maak in plaats daarvan een template override. Voor het Cassiopeia-template:
templates/cassiopeia/html/mod_breadcrumbs/default.php
Kopieer het origineel modules/mod_breadcrumbs/tmpl/default.php naar dat pad en bewerk daarna je kopie. Joomla laadt de override automatisch. De Templates-beheerder heeft een ingebouwde editor die deze override voor je maakt:
Systeem → Sitetemplates → [jouw template] → Overrides maken → mod_breadcrumbs
10.3 Opmaak zonder override
Voor eenvoudige visuele aanpassingen heb je helemaal geen override nodig. De standaardlay-out genereert al zijn eigen klassen, dus je kunt deze rechtstreeks in de CSS van je sjabloon aanpassen. In Cassiopeia plaats je je regels in user.css. Je kunt dat bestand aanmaken in de sjabloonbeheerder, waarna Cassiopeia het automatisch laadt.
.mod-breadcrumbs { font-size: 0.9rem; }
.mod-breadcrumbs__item.active span { color: #666; }
.mod-breadcrumbs { --breadcrumb-divider: “→”; }
Cassiopeia tekent de scheidingslijn tussen de breadcrumbs op basis van de CSS-variabele --breadcrumb-divider, met / als standaardwaarde. Het instellen van de variabele is voldoende: je hoeft de ::before regel niet te overschrijven.
Je hebt hiervoor het Module Class Suffix niet nodig. De lay-out geeft het niet weer, en in de breadcrumbs-positie van Cassiopeia heeft de module geen wrapper, dus het achtervoegsel verschijnt nooit. Gebruik het alleen wanneer je een andere opmaak nodig hebt voor een tweede Breadcrumbs-module, en kies dan ook een module-stijl zoals html5 op het tabblad ‘Geavanceerd’ van de module, zodat het achtervoegsel op een wrapper-element wordt weergegeven.
11. Gestructureerde data en SEO
11.1 Breadcrumbs helpen zoekmachines
Breadcrumbs zijn een van de goedkoopste manieren om je SEO in Joomla te verbeteren. Ze geven zoekmachines een duidelijke kaart van je sitehiërarchie, en Google toont vaak het spoor in plaats van de kale URL in de zoekresultaten.
11.2 Ingebouwde gestructureerde gegevens
De Joomla 6 Breadcrumbs-module genereert automatisch schema.org BreadcrumbList gestructureerde gegevens, zonder dat er configuratie nodig is. De lay-out voegt deze toe als een JSON-LD-script via de Web Asset Manager, dat Cassiopeia weergeeft in de <head> van de pagina. Voor een artikel dat wordt geopend vanuit een menu-item “Nieuws” ziet dit er als volgt uit:
{
“@context”: “https://schema.org”,
“@type”: “BreadcrumbList”,
“@id”: “https://example.test/#/schema/BreadcrumbList/17”,
“itemListElement”: [
{ “@type”: ‘ListItem’, “position”: 1,
“item”: { “@id”: “https://example.test/”, ‘name’: “Home” } },
{ “@type”: ‘ListItem’, “position”: 2,
“item”: { “@id”: “https://example.test/news”, ‘name’: “Nieuws” } },
{ “@type”: ‘ListItem’, “position”: 3,
“item”: { ‘name’: “Joomla 6 uitgebracht” } }
]
}
De @id van de lijst bevat de module-id (hier 17). De System - Schema.org-plugin gebruikt deze om de breadcrumbs te koppelen aan de WebPage in zijn eigen schemagrafiek.
Er zijn een paar regels die bepalen welke breadcrumbs in de gegevens terechtkomen:
- Breadcrumbs met een link krijgen een
@idmet de volledige URL. - Breadcrumbs zonder link, zoals koppen en scheidingstekens, worden overgeslagen. De posities worden zonder onderbrekingen verder geteld.
- De laatste kruimel zonder link wordt nog steeds toegevoegd, maar dan alleen met een
name. Google accepteert een vermelding zonder URL alleen voor de huidige pagina. Hier werd de titel van het artikel door com_content toegevoegd zonder link. Als de huidige pagina een menu-item is, heeft de bijbehorende kruimel een link en krijgt deze een@id, net als de andere. - De laatste kruimel wordt altijd in de gegevens opgenomen, zelfs wanneer de optie Laatste (
showLast) deze verbergt in het zichtbare spoor.
11.3 De Home-kruimel zit altijd in de data
Zelfs als je de Home-link visueel verbergt (showHome uit), houdt Joomla de homepage als positie 1 in de gestructureerde data via een terugval-Home-kruimel. Zo krijg je tegelijk een net zichtbaar spoor en complete machineleesbare data.
11.4 Test je markup
Valideer na publicatie de uitvoer met Google's Rich Results Test of de Schema Markup Validator. Een geldige BreadcrumbList kan de breadcrumb-weergave in de zoekresultaten opleveren.
12. Meertalige breadcrumbs
12.1 De ‘Home’-breadcrumb per taal
Op een meertalige site heeft elke taal zijn eigen standaard (home) menu-item. De Breadcrumbs-module vraagt om het standaarditem van de huidige taal:
$home = $menu->getDefault($app->getLanguage()->getTag());
Een Nederlandse pagina koppelt de Home-breadcrumb dus aan de Nederlandse startpagina, en een Engelse pagina aan de Engelse startpagina. Dit werkt alleen als elke actieve taal een eigen standaardmenu-item heeft. Als een taal er geen heeft, valt Joomla terug op het Home-item voor Alle talen, en de ‘Home’-crumb verwijst dan naar de verkeerde startpagina.
In de lijst met menu-items kun je het startpagina-item van een taal herkennen aan de taalvlag in de kolom ‘Home’ (of een taalcodebadge als er geen vlag is ingesteld). Het startpagina-item voor Alle talen toont een huisje-icoontje.
12.2 Dubbele Home-items voorkomen
Op meertalige sites kan het home-menu-item twee keer verschijnen: een keer uit de Home-kruimel en een keer uit de menustructuur. De standaardlayout detecteert dit en verwijdert het dubbele tweede item, zodat het spoor netjes blijft.
12.3 Vertaalde labels
Elke kruimelpadnaam is afgeleid van de titel van het menu-item, de categorie of het artikel dat de bezoeker op dat moment bekijkt. Op een meertalige site heeft elke taal zijn eigen menu-items en inhoud, elk met een eigen titel. Een Nederlandse pagina stelt zijn navigatiepad dus samen op basis van Nederlandse titels, en een Engelse pagina op basis van Engelse titels. Hiervoor zijn geen koppelingen nodig: die koppelen vertalingen aan elkaar, bijvoorbeeld voor de taalkeuzeschakelaar, maar ze veranderen het navigatiepad niet.
De vaste woorden komen uit het taalbestand van de module: „Home“ (MOD_BREADCRUMBS_HOME) en „Je bent hier:“ (MOD_BREADCRUMBS_HERE). Joomla vertaalt deze automatisch voor elke geïnstalleerde taal. Als je de optie homeText invult, vervangt die tekst “Home” in elke taal. Maak in dat geval per taal een aparte Breadcrumbs-module aan, elk met een eigen homeText, en stel het veld “Taal” van elke module in. De eenvoudigste optie is om homeText leeg te laten en het aan de taalbestanden over te laten, of de bewoording te wijzigen met een taaloverride.
13. Caching
13.1 Caching per Itemid
De Breadcrumbs-module heeft een verborgen, vaste itemid cachemodus. Wanneer module-caching actief is, slaat Joomla één gecachete kopie van het pad op per menu-item (Itemid) en per combinatie van toegangsniveaus. De rest van de URL wordt niet in aanmerking genomen.
Caching van de module vindt alleen plaats wanneer aan alle volgende voorwaarden is voldaan:
- Caching is ingeschakeld in de algemene configuratie.
- De optie Caching van de module is ingesteld op Gebruik algemeen. De standaardinstelling is Geen caching.
- De bezoeker is niet ingelogd. Ingelogde gebruikers krijgen altijd een nieuw gegenereerd spoor.
Let op: Cache-tijd wordt ingesteld in seconden, niet in minuten.
13.2 Wanneer moet je module-caching gebruiken?
- Houd de standaardinstelling aan: geen caching. Het samenstellen van het navigatiepad kost weinig: de module leest alleen het pad dat al in het geheugen staat, dus caching levert bijna geen besparing op.
- Caching per Itemid kan een verkeerd navigatiepad weergeven. Componenten voegen navigatiekrummels toe op basis van de volledige URL, niet alleen op basis van de
Itemid. Alle artikelen die vanuit één categorieblog worden geopend, hebben dezelfdeItemid, dus als caching is ingeschakeld, toont elk artikel het in de cache opgeslagen navigatiepad van het eerste artikel dat werd bezocht, inclusief de titel daarvan. - Overweeg ‘Use Global’ alleen wanneer elke pagina een eigen menu-item heeft, zodat het navigatiepad volledig uit de menustructuur komt.
- Breadcrumbs op basis van de ingelogde gebruiker zijn veilig: Joomla toont nooit in de cache opgeslagen modules aan ingelogde gebruikers.
- Snelheid nodig? Gebruik in plaats daarvan de System - Page Cache-plugin. Deze slaat de hele pagina per volledige URL op in de cache, zodat elk artikel zijn eigen correcte navigatiepad behoudt.
14. Veelvoorkomende fouten en valkuilen
14.1 Er verschijnen geen breadcrumbs
Symptoom: er is nergens op de site een spoor.
Oplossing: publiceer de Breadcrumbs-module, zet hem op een echte templatepositie (zoals breadcrumbs in Cassiopeia) en wijs hem toe aan de juiste pagina's.
14.2 Het spoor begint in de verkeerde tak
Symptoom: een artikel toont Home → Verkeerde sectie → Artikel.
Oplossing: de verkeerde Itemid is actief. Link naar de inhoud via het juiste menu-item, of geef de pagina een eigen menu-item. Controleer ook de categorieboom, want artikelkruimels volgen de bovenliggende categorieën.
14.3 Dubbele Home op meertalige sites
Symptoom: het spoor toont Home → Home → ....
Oplossing: dit gebeurt wanneer het home-item zowel in de Home-kruimel als in de menustructuur voorkomt. Modern Joomla verwijdert het dubbele item automatisch; gebruik je een eigen override, zorg dan dat die de ontdubbel-logica uit de standaardlayout behoudt.
14.4 Een kop-kruimel heeft geen link
Symptoom: een tussenliggende kruimel is platte tekst, geen link.
Oplossing: dit is correct gedrag. Menu-items van het type Kop of Scheidingsteken hebben geen pagina, dus Joomla geeft ze als tekst weer. Heb je daar een link nodig, gebruik dan een echt menu-itemtype.
14.5 De laatste kruimel herhaalt de paginatitel
Symptoom: het spoor eindigt met dezelfde tekst als de paginakop, wat overbodig aanvoelt.
Oplossing: zet de optie Laatste (showLast) uit om het spoor bij de bovenliggende pagina te laten eindigen.
14.6 De module bewerkt in plaats van een override
Symptoom: aangepaste breadcrumb-markup verdwijnt na een Joomla-update.
Oplossing: bewerk nooit bestanden in modules/mod_breadcrumbs/. Zet je wijzigingen in een template-override op templates/[template]/html/mod_breadcrumbs/default.php.
15. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:
- Publiceer één ‘Breadcrumbs’-module en wijs deze toe aan alle pagina’s behalve de startpagina. Gebruik op een meertalige site slechts één module per taal als je per taal een aangepaste ‘Home’-tekst wilt.
- Geef de module een duidelijke titel, zelfs als je deze verbergt: schermlezers lezen deze voor als het label van de breadcrumb-navigatie.
- Zorg voor een overzichtelijke, ondiepe categorieboom, omdat artikel-breadcrumbs de bovenliggende categorieën volgen.
- Link altijd naar inhoud via een correct menu-item, zodat de
Itemidstabiel blijft. - Bepaal eenmalig of je de laatste crumb wilt weergeven en houd dit consistent op de hele site.
- Zet de module-caching op ‘Geen caching’. De module slaat één pad per menu-item op, wat ertoe kan leiden dat op artikelpagina’s het verkeerde pad wordt weergegeven.
- Pas het uiterlijk aan met CSS en de opmaak met een sjabloonoverride. Bewerk nooit de modulebestanden.
- Vertrouw op de ingebouwde schema.org-uitvoer en valideer deze met de Rich Results Test van Google.
- Stel op meertalige sites per taal een standaardmenu-item in, zodat het kruimelpad naar de startpagina correct wordt weergegeven.
16. In het kort
BREADCRUMBS WEERGEVEN mod_breadcrumbs publiceren in een sjabloonpositie
VERBERGEN OP STARTPAGINA Menutoewijzing → Alle pagina’s behalve Startpagina
“U BEVINDT ZICH HIER” Optie showHere (uit = locatieconfict)
BREADCRUMB STARTPAGINA Optie showHome (homeText overschrijft het woord)
LAATSTE BROODKRUMBEL Optie showLast (uit = eindigt bij bovenliggende)
GEGEVENSBRON $app->getPathway() (Pathway-object, geen tabel)
BASIS VAN HET PAD Actief menu-item + de bovenliggende items (de tree-eigenschap)
EXTRA BROODKRUMBELS Componenten roepen $pathway->addItem(name, link) aan
EEN CRUMB TOEVOEGEN (PHP) $app->getPathway()->addItem(‘Label’, ‘index.php?...’)
PLUGIN-GEBEURTENIS onAfterDispatch (na de crumbs van de component)
PIPELINE Router → Menu-item → Pathway → Component → Module → Lay-out
DB-TABELEN #__menu (boom), #__modules, #__modules_menu, #__viewlevels
MARKUP OVERSCHRIJVEN templates/[tpl]/html/mod_breadcrumbs/default.php
GESTRUCTUREERDE GEGEVENS schema.org BreadcrumbList JSON-LD, automatisch
(Home en laatste crumb inbegrepen, zelfs wanneer verborgen)
CACHING Standaard: geen caching; houd dit uitgeschakeld
(modus itemid: één gecachete breadcrumb per menu-item, niet per URL)
VEROUDERDE API BreadcrumbsHelper::getList()/getHome() (gebruik getBreadcrumbs()/getHomeItem())
Naar boven17. Samenvatting
Joomla-breadcrumbs zijn op het eerste gezicht eenvoudig, maar onder de oppervlakte heel slim:
- Pathway: de interne lijst met breadcrumbs, die bij elk verzoek opnieuw wordt opgebouwd.
- Menustructuur: het actieve menu-item en de bovenliggende items vormen de basis van het pad.
- Componenten: voeg diepere breadcrumbs toe, zoals categorie- en artikeltitels, via
addItem(). - Pijplijn: router → menu-item → Pad → component → module → lay-out.
- Module:
mod_breadcrumbsleest het pad, voegt de ‘Home’-broodkruimel toe en geeft het zichtbare navigatiepad weer. - SEO: de module genereert automatisch gestructureerde gegevens volgens schema.org.
- Caching: houd het cachen van de module uitgeschakeld, omdat de cache per menu-item is, niet per pagina.
- Itemid: de context van het menu-item die bepaalt waar het spoor begint.
Zodra je begrijpt dat het spoor je menu- en categoriestructuur weerspiegelt, zijn gebroken breadcrumbs geen raadsel meer. Ze zijn bijna altijd een symptoom van een verkeerde Itemid, een rommelige categorieboom of een ontbrekend menu-item.
Als je broodkruimels er verkeerd uitzien, je navigatie verwarrend aanvoelt of je schone gestructureerde gegevens wilt voor betere zoekresultaten, loont het de moeite om je menustructuur en routing vroeg te herzien. Zorg dat de menustructuur klopt, dan regelen de broodkruimels zich vanzelf.
Naar boven

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.
Gerelateerde artikelen
Veelgestelde vragen
Joomla-breadcrumbs zijn een navigatiespoor dat laat zien waar de huidige pagina zich bevindt in de structuur van je website, vanaf de startpagina tot aan de pagina die je op dat moment bekijkt. Ze worden samengesteld op basis van de menustructuur en de categoriestructuur, niet op basis van de pagina’s waarop een bezoeker eerder heeft geklikt.
Breadcrumbs voegen interne links naar bovenliggende pagina’s toe en helpen zoekmachines de hiërarchie van je site te begrijpen. De Breadcrumbs-module van Joomla genereert ook automatisch gestructureerde gegevens volgens schema.org BreadcrumbList, die Google kan gebruiken om het navigatiepad in de zoekresultaten weer te geven.
Ja. Met de module-opties kun je het label „U bent hier“, de Home-crumb en de laatste crumb weergeven of verbergen, en de Home-tekst wijzigen. Je kunt het uiterlijk aanpassen met CSS, de bewoordingen met taaloverrides en de opmaak met een sjabloonoverride van mod_breadcrumbs.
Dat hangt af van de CSS van je sjabloon. In het standaardsjabloon Cassiopeia wordt het spoor naar een nieuwe regel verplaatst als het te lang is voor een klein scherm. Controleer bij andere sjablonen hoe een lang spoor eruitziet op een telefoon en overweeg om de laatste crumb te verbergen om het kort te houden.
Ga naar Systeem → Sitemodules → Nieuw → Breadcrumbs. Kies een sjabloonpositie (in Cassiopeia: breadcrumbs), stel de status in op Gepubliceerd en wijs de module toe aan de pagina’s waarop het pad moet verschijnen.
Nauwelijks. De module leest alleen het spoor dat Joomla al in het geheugen heeft opgebouwd voor de huidige pagina, dus het voegt geen extra databasequery’s toe. Dat is ook de reden waarom je de modulecaching voor breadcrumbs uitgeschakeld kunt laten.













