Tags in Joomla
Tags lijken de eenvoudigste functie van Joomla: je typt een woord, drukt op Enter en je bent klaar. Maar achter dat kleine invoerveld zit een van de krachtigste en meest verkeerd begrepen onderdelen van het systeem. Tags reiken tot in de database, de router, de zoekmachine en zelfs je eigen maatwerkextensies.
Dit artikel legt uit hoe Joomla-tags echt werken. Het behandelt de basis voor website-eigenaren en redacteuren, de praktische inrichting voor beheerders en de technische details voor ontwikkelaars. Je leert hoe je tags aanmaakt, hoe je elk type content van tags voorziet, hoe tagging onder water wordt opgeslagen en hoe je de meest voorkomende fouten voorkomt.
Categorieën zeggen wat je content is. Tags zeggen waar het over gaat.
Het doel is eenvoudig: je Joomla-tags goed genoeg laten begrijpen zodat je ze met vertrouwen kunt gebruiken.
1. De basis
1.1 Wat is een tag?
Een tag is een flexibel label dat je aan een stuk content koppelt. Waar een categorie een vaste map is waarin een item leeft, is een tag een onderwerp waar een item over gaat. Eén artikel kan meerdere tags tegelijk dragen.
Tags dienen twee groepen mensen:
- Ze helpen redacteuren om gerelateerde content over de hele site met elkaar te verbinden.
- Ze helpen bezoekers om meer over een onderwerp te ontdekken, ongeacht in welke categorie het staat.
1.2 Tags lopen dwars door alles heen
Een categorie beantwoordt de vraag “waar hoort dit thuis?”. Een tag beantwoordt “welke onderwerpen raakt dit?”. Een artikel over een Joomla-beveiligingsrelease kan in de ene categorie Nieuws staan en toch de tags security, joomla-6 en updates dragen. Diezelfde tags kunnen ook op een contactpersoon, een nieuwsfeed of een maatwerkitem verschijnen.
1.3 Tags werken over componenten heen
Tags zijn niet beperkt tot artikelen. De meeste core componenten ondersteunen tagging standaard:
- Artikelen:
com_content - Contactpersonen:
com_contact - Nieuwsfeeds:
com_newsfeeds - Categorieën zelf kunnen ook van tags worden voorzien.
Veel extensies van derden hergebruiken hetzelfde taggingsysteem. Zodra je tags begrijpt, begrijp je hoe een groot deel van Joomla content met elkaar verbindt.
1.4 Waar vind ik tags?
In de Joomla 6-backend beheer je alle tags op één centrale plek:
Componenten → Tags (beheer alle tags)
Componenten → Tags → Nieuw (een tag aanmaken)
Tags toepassen doe je op een heel andere plek: op het bewerkscherm van het item zelf, in een veld Tags. We behandelen beide schermen hieronder.
Naar boven2. Tags aanmaken en beheren
2.1 Een tag aanmaken
Om een losse tag aan te maken, ga je naar:
Componenten → Tags → Nieuw
Twee velden zijn het belangrijkst:
- Titel: het leesbare label dat op de site en in lijsten wordt getoond.
- Alias: de korte, URL-veilige naam. Joomla genereert deze uit de titel als je het veld leeg laat.
2.2 Tags on-the-fly aanmaken
Je hebt het scherm Nieuw zelden nodig. Wanneer je een artikel bewerkt, kun je in het veld Tags een nieuw woord typen en op Enter drukken. Joomla maakt de tag meteen aan en koppelt deze aan het item. Dit gaat snel, maar het is ook waar de meeste rommelige taglijsten beginnen (zie Veelgemaakte fouten).
2.3 Het tag-bewerkscherm
Het bewerkscherm is verdeeld in tabbladen, net als bij een categorie:
| Tabblad | Wat het beheert |
|---|---|
| Nieuwe tag | Titel, alias, bovenliggende tag, status, toegang, taal, beschrijving. |
| Afbeeldingen en URL’s | Een pictogramafbeelding, een afbeelding op volledig formaat en externe links voor de tagpagina. |
| Publiceren | Aanmaak- en wijzigingsdatums, auteur, meta-informatie. |
| Opties en Metadata | Weergaveopties voor de tagpagina en SEO-metadata. |
2.4 Belangrijke velden uitgelegd
- Bovenliggend: laat op de standaardwortel staan voor een platte tag, of kies een andere tag om hierin te nesten.
- Status: Gepubliceerd, Gedepubliceerd, Gearchiveerd of Verplaatst naar prullenbak. Alleen gepubliceerde tags verschijnen op de site.
- Toegang: Publiek, Geregistreerd, Speciaal of een aangepast niveau. Een tag die de bezoeker niet mag zien, blijft voor hem verborgen.
- Taal: koppel de tag aan één sitetaal, of laat deze op “Alle” staan.
- Beschrijving: wordt bovenaan de tagpagina in de frontend getoond.
3. Geneste tags
3.1 Tags kunnen een boomstructuur vormen
De meeste sites gebruiken een platte lijst met tags, maar Joomla laat je tags ook in andere tags nesten. Het resultaat is een boomstructuur, net als bij categorieën:
ROOT
├── joomla
│ ├── extensions
│ └── templates
└── linux
Achter de schermen slaat Joomla deze boom op met hetzelfde Nested Set Model dat het voor categorieën gebruikt. Elke tag heeft een lft-waarde (left) en een rgt-waarde (right), plus een level en een path.
3.2 Hoe lft en rgt werken
De regel is dezelfde als bij categorieën: een bovenliggend item omsluit altijd zijn onderliggende items. De lft van de ouder is kleiner dan de lft van elk kind, en de rgt is groter dan de rgt van elk kind. Zo kan Joomla een hele tak met tags ophalen met één snelle query, zonder recursie.
3.3 De knop Rebuild
Het tagoverzicht bevat een knop Rebuild in de toolbar. Deze herberekent lft, rgt, level en path. Gebruik hem na een migratie, na directe databasewijzigingen of wanneer de volgorde van de tags er verkeerd uitziet.
3.4 Moet je tags nesten?
Houd tags in de praktijk plat. Tags nesten is de extra complexiteit zelden waard, omdat tags bedoeld zijn als overstijgend en licht. Als je merkt dat je een diepe tagboom bouwt, hoort die structuur meestal thuis in je categorieën.
Naar boven4. Je content van tags voorzien
4.1 Het veld Tags
Je voorziet een item van tags vanuit het eigen bewerkscherm van dat item. Open voor een artikel het artikel en zoek het veld Tags in de rechterkolom:
Inhoud → Artikelen → (open een artikel) → Tags
Begin met typen. Joomla stelt bestaande tags voor terwijl je typt. Kies er een, of typ een nieuw woord en druk op Enter om het in één stap aan te maken en te koppelen. Je kunt zoveel tags aan een item toevoegen als je wilt.
4.2 Overal hetzelfde veld
Het veld Tags ziet er hetzelfde uit en gedraagt zich hetzelfde op artikelen, contactpersonen, nieuwsfeeds en categorieën. Elke extensie die meedoet aan tagging toont exact dezelfde besturing. Die consistentie is een van de stille sterke punten van het systeem.
4.3 Tags in batch toekennen
In het artikeloverzicht kun je veel items tegelijk van tags voorzien. Selecteer meerdere artikelen, open het Batch-hulpmiddel onderaan de lijst, kies een tag en pas toe. Dit is de snelste manier om een onderwerpstag aan bestaande content toe te voegen zonder elk item te bewerken.
4.4 Wat er gebeurt als je opslaat
Wanneer je een item met tags opslaat, bewaart Joomla de tags niet in de rij van het artikel zelf. In plaats daarvan schrijft het één rij per tag naar een aparte koppeltabel die het item aan elke tag verbindt. We bekijken die tabel in het ontwikkelaarsgedeelte.
Naar boven5. Tags in de frontend
5.1 Menu-itemtypes
Joomla levert drie menu-itemtypes voor tags. Maak ze aan via Menu’s → (je menu) → Nieuw en kies de groep Tags:
| Menu-itemtype | Wat het toont |
|---|---|
| Tagged Items | Alle items die een of meer gekozen tags dragen, met volledige layoutopties. |
| Compact List of Tagged Items | Een eenvoudige, compacte lijst met items voor de gekozen tags. |
| List All Tags | Een pagina met alle gepubliceerde tags, zodat bezoekers door onderwerpen kunnen bladeren. |
Het type “Tagged Items” kan meerdere tags combineren. Je kunt kiezen of een item aan alle geselecteerde tags moet voldoen of aan een willekeurige ervan.
5.2 De twee tag-modules
Twee coremodules tonen tags in je templateposities:
| Module | Doel |
|---|---|
Popular Tags (mod_tags_popular) |
Toont de meest gebruikte tags, optioneel als tagwolk waarbij de grootte het gebruik weergeeft. |
Similar Tags (mod_tags_similar) |
Toont op een detailpagina andere items die dezelfde tags delen. |
Similar Tags is de eenvoudige manier om een blok “Gerelateerde content” toe te voegen. Het vereist geen handmatige koppelingen: het vindt simpelweg items die tags delen met de pagina waarop de bezoeker zich bevindt.
5.3 URL’s en routing
Met SEF-URL’s ingeschakeld krijgt een tagpagina een nette URL. Het mooiste resultaat krijg je met een menu-item dat naar de tag wijst:
/topics/joomla → menu-item "Tagged Items" voor de tag joomla
/component/tags/tag/5-joomla → dezelfde tag zonder eigen menu-item
Zonder menu-item valt Joomla terug op de generieke route /component/tags/, die werkt maar minder netjes is. Geef tags waarmee je in zoekmachines wilt scoren een echt menu-item.
6. Tags versus categorieën
Tags en categorieën lijken in de backend op elkaar, maar lossen verschillende problemen op. De verkeerde kiezen is de meest gemaakte taggingfout.
| Gebruik een categorie wanneer… | Gebruik een tag wanneer… |
|---|---|
| Een item hoort op één plek thuis. | Een item heeft met veel onderwerpen te maken. |
| Hiërarchie en structuur zijn belangrijk. | Je wilt platte, overstijgende labels. |
| Je hebt ACL of een workflow nodig. | Je wilt ontdekken en filteren. |
| De URL moet de structuur weerspiegelen. | De URL is bijzaak. |
Een korte manier om het verschil te onthouden:
Categorieën bepalen wat content is.
Tags beschrijven waar content over gaat.
De meeste content heeft precies één categorie en een handvol tags nodig. Als je veel categorieën per item nodig denkt te hebben, wilde je waarschijnlijk tags. Als je voor bijna elk artikel een gloednieuwe tag aanmaakt, wilde je waarschijnlijk een categorie.
Naar boven7. Praktijkvoorbeelden van tags
De juiste set tags hangt af van het type website. Het doel is altijd hetzelfde: een kleine, herbruikbare woordenschat die beschrijft waar content over gaat, naast een nette categoriestructuur. Hier zijn vier veelvoorkomende patronen.
7.1 Kennisbank of supportsite
Artikelen staan in productcategorieën, terwijl tags beschrijven wat voor soort hulp ze bieden:
installation
configuration
security
performance
troubleshooting
Een bezoeker die een installatiehandleiding leest, kan dan meteen doorspringen naar elk ander artikel met de tag “installation”, zelfs bij verschillende producten.
7.2 Productdocumentatie
Categorieën volgen de productonderdelen; tags markeren het niveau van de lezer en het onderwerp:
beginner
advanced
api
migration
Zo kun je een pagina “Tagged Items” bouwen voor alles met de tag api, ongeacht in welk hoofdstuk van de handleiding het staat.
7.3 Nieuws- of communitysite
Categorieën splitsen de secties (Nieuws, Blog, Evenementen); tags dragen de doorlopende thema’s:
joomla-6
extensions
security
accessibility
De module Similar Tags maakt dan van elk artikel automatisch een klein knooppunt van gerelateerde verhalen.
7.4 Bedrijfswebsite of webshop
Op een bedrijfssite beschrijven tags communicatiethema’s; in een webshop lopen ze dwars door de productcategorieën heen:
| Type site | Voorbeeldtags |
|---|---|
| Bedrijfssite | press, events, sustainability, careers |
| Webshop | sale, new-arrival, bestseller, clearance |
De kerngedachte is in alle gevallen hetzelfde: de categorieboom weerspiegelt de sitestructuur, en een korte lijst met tags weerspiegelt de thema’s die daar dwars doorheen lopen. Houd de taglijst klein genoeg om hem uit je hoofd te kennen.
Naar boven8. Onder de motorkap (ontwikkelaarsperspectief)
8.1 Twee kerntabellen
Tagging gebruikt twee tabellen. De eerste bewaart de tags zelf:
#__tags
id, parent_id, lft, rgt, level, path
title, alias, note, description
published, access, language
params, metadesc, metakey, metadata
images, urls, hits, version
publish_up, publish_down
Je ziet dat deze bijna identiek is aan #__categories: dezelfde nested-set-kolommen, dezelfde publicatie- en metadatavelden. Tags zijn in feite een tweede taxonomieboom.
8.2 De koppeltabel
De koppeling tussen een item en zijn tags staat in een aparte tabel:
#__contentitem_tag_map
type_alias bijv. com_content.article
core_content_id PK uit #__ucm_content
content_item_id PK uit de echte contenttabel (bijv. #__content)
tag_id PK uit #__tags
tag_date wanneer de koppeling is opgeslagen
type_id PK uit #__content_types
Elk item met tags levert één rij per tag op. Dit is een klassiek many-to-many-ontwerp: één item koppelt aan veel tags, en één tag koppelt aan veel items.
8.3 Tags opvragen met SQL
Zodra je de twee tabellen kent, zijn directe query’s kort. Toon elke gepubliceerde tag:
SELECT id, title
FROM #__tags
WHERE published = 1
ORDER BY title;
Vind de tags die aan één artikel (id 101) hangen door de koppeltabel aan de tagtabel te joinen:
SELECT t.id, t.title
FROM #__tags AS t
INNER JOIN #__contentitem_tag_map AS m
ON m.tag_id = t.id
WHERE m.type_alias = 'com_content.article'
AND m.content_item_id = 101;
Tel hoeveel items elke tag dragen, meest gebruikt eerst:
SELECT m.tag_id, COUNT(*) AS total
FROM #__contentitem_tag_map AS m
GROUP BY m.tag_id
ORDER BY total DESC;
Filter altijd op type_alias én op content_item_id. Het id 101 is alleen uniek binnen een contenttype, dus een artikel en een contactpersoon kunnen hetzelfde numerieke id delen.
8.4 De UCM-laag
Tags steunen op Joomla’s Unified Content Model (UCM). Dit is de abstractie waardoor één taggingsysteem werkt voor artikelen, contactpersonen en maatwerkitems. Drie tabellen ondersteunen dit:
| Tabel | Rol |
|---|---|
#__content_types |
Definieert elk taggbaar type en hoe de echte tabel ervan gelezen wordt. |
#__ucm_content |
Een genormaliseerde kopie van kernvelden (titel, alias, status) voor elk item met tags. |
#__ucm_base |
Een opzoektabel die UCM-id’s terugkoppelt aan hun contenttype en item. |
Daarom heeft de koppeltabel zowel een core_content_id (UCM) als een content_item_id (de echte rij). UCM geeft Joomla één consistente manier om over “een item” te praten, ongeacht welke component de eigenaar is.
8.5 De Tags-API in PHP
Je raakt de tabellen zelden rechtstreeks aan. De klasse TagsHelper doet het werk:
use Joomla\CMS\Helper\TagsHelper;
$tagsHelper = new TagsHelper();
// Alle tag-id's van een bepaald artikel:
$tagIds = $tagsHelper->getTagIds(42, 'com_content.article');
// Volledige tag-objecten (titel, alias, enz.) voor een item:
$itemTags = $tagsHelper->getItemTags('com_content.article', 42);
// Alle items die een set tags dragen:
$items = $tagsHelper->getTagItemsQuery([5, 9]);
8.6 Een maatwerkcomponent taggbaar maken
Om tagging aan je eigen component toe te voegen, bouw je niets opnieuw. Je doet mee (opt-in):
- Registreer je type in
#__content_types(alias, tabelkoppeling, routehelper). - Laat je Table-klasse
TaggableTableInterfaceimplementeren en gebruikTaggableTableTrait. - Voeg een veld
tagsvantype="tag"toe aan je bewerkformulier.
De trait koppelt een observer in die de koppelrijen automatisch wegschrijft telkens wanneer je een item opslaat of verwijdert. Je component krijgt dan het veld Tags, tagpagina’s in de frontend en de modules gratis.
8.7 Events en observers
Tagging verloopt via een tabel-observer in plaats van via één specifiek event. Wanneer een taggbaar item wordt opgeslagen, treedt de observer in werking naast de normale contentevents. Plugins kunnen reageren met de standaard contentevents door een tagcontext te gebruiken:
| Event | Wanneer het afgaat |
|---|---|
onContentAfterSave (context com_tags.tag) |
Nadat een tag zelf is opgeslagen. |
onContentBeforeDelete (context com_tags.tag) |
Voordat een tag wordt verwijderd. |
| Tabel-observer op een taggbaar item | Schrijft of verwijdert rijen in #__contentitem_tag_map bij opslaan en verwijderen. |
9. Web Services API
9.1 Tags reizen mee met hun items
Joomla 6 levert geen losstaand openbaar REST-endpoint dat alle tags opsomt. In plaats daarvan verschijnen tags binnen de responses van content die ze ondersteunt. Wanneer je een artikel via de API opvraagt, komen de tags mee in de relaties:
curl -H "X-Joomla-Token: <token>" \
https://example.test/api/index.php/v1/content/articles/42
De JSON-response bevat een tags-relatie met de tag-id’s die aan dat artikel hangen.
9.2 Tags toekennen via de API
Om een item programmatisch van tags te voorzien, stuur je de tag-id’s mee bij het aanmaken of bijwerken. Voor een artikel:
curl -X PATCH \
-H "X-Joomla-Token: <token>" \
-H "Content-Type: application/json" \
-d '{"tags": ["5", "9"]}' \
https://example.test/api/index.php/v1/content/articles/42
Joomla werkt de koppeltabel zo bij dat deze exact overeenkomt met de id’s die je stuurt. Een lege array verwijdert alle tags van het item.
9.3 Wanneer je een tag-endpoint nodig hebt
Als je project echt tags via REST moet opsommen of beheren, ontsluit je ze via een kleine eigen web-services-plugin of een API-controller in een component. Omdat de data al in #__tags staat en TagsHelper de query’s afhandelt, is zo’n endpoint snel te schrijven.
10. SEO en metadata
10.1 Tagpagina’s zijn echte pagina’s
Elke gepubliceerde tag heeft een eigen frontendpagina met de items die hem dragen. Zoekmachines kunnen deze pagina’s indexeren, wat tags tot een echte SEO-troef maakt, of tot een echte SEO-last als je ze verwaarloost.
10.2 Geef belangrijke tags metadata
Op het tabblad Opties en Metadata van de tag kun je een metabeschrijving en een paginakop instellen. Een tagpagina met een duidelijke titel en beschrijving, plus een geschreven beschrijving bovenaan, kan scoren als onderwerpsknooppunt. Een lege tagpagina met alleen een lijst links doet dat zelden.
10.3 Vermijd dunne en dubbele tagpagina’s
Honderden tags die elk naar één of twee items wijzen, leveren veel dunne pagina’s op. Die kunnen je site verwateren in de zoekresultaten. Houd het aantal tags klein en zorg dat elke tag een betekenisvolle hoeveelheid content groepeert.
10.4 Stuur indexering aan
Als je niet wilt dat tagpagina’s worden geïndexeerd, zet je de metadatawaarde robots op noindex, follow op de tag, of regel je dit globaal in je template. Zo behoud je het ontdekkingsvoordeel voor bezoekers en houd je dunne pagina’s uit de index.
11. Veelgemaakte fouten en valkuilen
11.1 Wildgroei aan tags
Symptoom: honderden tags, veel maar één keer gebruikt, met bijna-duplicaten zoals seo, SEO en search-engine-optimization.
Oplossing: spreek een korte, vaste tagwoordenschat af voordat je begint. Beschouw het direct aanmaken van tags als gemak, niet als vrijbrief. Voeg duplicaten samen door items opnieuw te taggen met de overblijvende tag en de rest te verwijderen.
11.2 Tags gebruiken in plaats van categorieën
Symptoom: elk artikel heeft tien tags en staat in één generieke categorie. Navigatie en URL’s voelen vlak aan.
Oplossing: breng structurele indelingen onder in categorieën en houd tags voor echte overstijgende thema’s. Eén duidelijke categorie plus een paar tags is beter dan geen categorie en een wolk aan tags.
11.3 Het menu-item vergeten
Symptoom: tagpagina’s werken, maar gebruiken lelijke /component/tags/-URL’s en scoren slecht.
Oplossing: maak voor elke tag die ertoe doet een menu-item “Tagged Items” aan, zodat deze een nette, stabiele URL en goede paginametadata krijgt.
11.4 Verschil in hoofdletters en spelling
Symptoom: bezoekers komen op een tagpagina die minder items toont dan verwacht, omdat content over twee spellingen is verdeeld.
Oplossing: houd tags in kleine letters en consistent. Kies tussen enkelvoud of meervoud (bijvoorbeeld tutorial, niet een mix van tutorial en tutorials) en houd je daaraan.
11.5 Toegang op tags negeren
Symptoom: een tagpagina toont links naar items die de bezoeker niet kan openen.
Oplossing: onthoud dat de toegang van een tag en van een item los van elkaar staan. Stel de tagtoegang af op het publiek en vertrouw voor de uiteindelijke controle op de itemtoegang.
Naar boven12. Best practices
Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:
- Gebruik categorieën voor structuur en tags voor onderwerpen. Ze zijn niet uitwisselbaar.
- Bepaal vooraf een kleine, vaste tagwoordenschat en hergebruik die.
- Houd tags plat, in kleine letters en consistent gespeld.
- Geef belangrijke tags een echt menu-item, een beschrijving en metadata.
- Gebruik de module Similar Tags voor directe “gerelateerde content” zonder handmatig te koppelen.
- Ruim eenmalige tags op zodat je geen dunne pagina’s met weinig waarde maakt.
- Doe in maatwerkextensies mee via
TaggableTableInterfacein plaats van tagging opnieuw uit te vinden.
13. In het kort
TAG MAKEN Componenten → Tags → Nieuw
ITEM TAGGEN Open het item → veld Tags → typ & Enter
BATCH-TAG Artikellijst → selecteer → Batch → kies tag
NESTEN Stel het veld "Bovenliggend" in (spaarzaam gebruiken)
REBUILD Componenten → Tags → Rebuild (na migratie/DB-edits)
FRONTPAGINA Menu-itemtype "Tagged Items"
ALLE TAGS Menu-itemtype "List All Tags"
GERELATEERD Module: Similar Tags (mod_tags_similar)
WOLK Module: Popular Tags (mod_tags_popular)
TABELLEN #__tags + #__contentitem_tag_map (+ UCM)
SQL-JOIN map.tag_id = tags.id, filter op type_alias
API (PHP) TagsHelper->getItemTags('com_content.article', $id)
API (REST) tags komen mee in /v1/content/articles-responses
SEO Voeg metadata + nette menu-URL toe aan kerntags
Naar boven14. Samenvatting
Tags zijn veel meer dan een tekstveld. Ze vormen een tweede taxonomie die content over de hele site met elkaar verbindt:
- Ontdekking: bezoekers volgen onderwerpen dwars door categorieën heen.
- Verbanden: de module Similar Tags bouwt automatisch blokken met gerelateerde content.
- Flexibiliteit: één item kan meerdere onderwerpen tegelijk dragen.
- Bereik: hetzelfde systeem werkt voor artikelen, contactpersonen, nieuwsfeeds en maatwerkextensies.
- SEO: goed beheerde tagpagina’s worden onderwerpsknooppunten; verwaarloosde worden dunne pagina’s.
- Ontwikkelaarsintegratie: een gedeelde API en een eenvoudige opt-in-interface.
Met discipline gebruikt maken tags een Joomla-site makkelijker te verkennen en makkelijker te laten groeien. Slordig gebruikt leveren ze wildgroei, dunne pagina’s en verwarring op. Het verschil zit bijna altijd in een kleine, consistente woordenschat en een paar duidelijke menu-items.
Of je nu een nieuwe Joomla-site plant, een uit de hand gelopen taglijst opschoont of tagging aan een maatwerkextensie toevoegt: het loont om de taxonomie vroeg goed te krijgen. Tags zijn het stille web van verbindingen dat je content bijeenhoudt.
Naar boven

Joomla en Linux specialist voor snelle, veilige en schaalbare websites.


