
Articles in Joomla
Articles are the most visible part of a Joomla website. They look simple at first sight, but they touch almost every part of the system: content, categories, tags, permissions, workflows, languages, templates, and the REST API.
This article explains how Joomla articles really work. It covers the basics for website owners and editors, the daily setup for administrators, and the technical details for developers. You will learn how to create articles, how publishing and scheduling work, how Access Control fits in, and how Joomla 6 exposes articles through the Web Services API.
Articles are the beating heart of every Joomla site
The goal is simple: help you understand Joomla articles well enough to use them with confidence.
1. The Basics
1.1 What is an Article?
An article is a single piece of content managed by the core component com_content. You can think of an article as one page of text in a magazine.
Every article in Joomla:
- Lives as one row in the
#__contenttable. - Belongs to exactly one category.
- Has a title, alias, intro text, full text, author, dates, and a status.
- Can have tags, custom fields, images, links, and metadata.
If Joomla were a magazine, an article is one printed page and a category is the section it sits in.
1.2 Where Do I Find Articles?
In the Joomla 6 backend, you manage articles from the Content menu:
Content → Articles (the list view)
Content → Articles → New (create a new article)
Content → Featured Articles (the front-page pool)
Content → Categories (the containers)
Content → Fields (custom fields for articles)
Content → Workflows (stages and transitions)
The article list is where editors spend most of their time.
1.3 Anatomy of an Article
Every article is built from a fixed set of parts:
| Part | What it stores |
|---|---|
| Title | The headline, shown everywhere. |
| Alias | A URL-safe slug, auto-generated from the title. |
| Intro text | The part shown above the Read More break. |
| Full text | Everything after the Read More break. |
| Category | The single parent category (required). |
| Status | Published, Unpublished, Archived, or Trashed. |
| Featured | Whether the article appears in Featured Articles. |
| Access | The Viewing Access Level. |
| Language | A specific language tag, or "All". |
1.4 The Read More Break
The Read More button in the editor inserts a small piece of HTML:
<hr id="system-readmore">
Joomla splits the article in two at this point:
- Everything before the marker becomes
introtext. - Everything after the marker becomes
fulltext.
On a blog or category view, Joomla shows only the intro with a "Read more" link. On the single-article view, both parts join together again.
2. Creating and Managing Articles
2.1 Creating an Article
To create a new article, go to:
Content → Articles → New
Two fields are required:
- Title: the human-readable headline.
- Category: pick one from the tree. The category field cannot be empty.
Everything else is optional, but in practice title, category, and body are the minimum you need to publish something useful.
2.2 The Article Edit Screen
The edit screen is split into tabs. Each tab controls a different part of the article:
| Tab | What it controls |
|---|---|
| Content | Title, alias, category, body, intro image, full-text image. |
| Images and Links | Structured intro/full images and the A/B/C link slots. |
| Options | Per-article display overrides (show title, author, dates, hits). |
| Publishing | Start and finish dates, author alias, meta information. |
| Permissions | Per-group ACL for this single article. |
| Fields | Custom fields bound to the category or group. |
| Configure Edit Screen | Hide or show fields for editors in this category. |
2.3 Key Fields Explained
- Alias: used in the URL. The alias must be unique inside its category.
- Status: Published, Unpublished, Archived, or Trashed.
- Featured: Yes or No. Flips a row in
#__content_frontpage. - Access: which Viewing Access Level may see the article.
- Language:
*for all, or a specific tag such asnl-NL. - Note: an internal label, never shown to visitors.
- Version Note: a short message saved in the version history.
2.4 Saving Options
The toolbar offers several save actions:
- Save: write and stay on the edit screen.
- Save & Close: write and return to the list.
- Save & New: write and open a blank article.
- Save as Copy: duplicate the article with a new id.
- Versions: open the version history dialog.
- Close: discard unsaved changes.
3. Status, Publishing, and Scheduling
3.1 The Four Statuses
Every article has one of four statuses:
| Status | Visible? | Typical use |
|---|---|---|
| Published | Yes (if dates and access allow) | Live content. |
| Unpublished | No | Drafts and work in progress. |
| Archived | No (only in the Archived view) | Old but kept content. |
| Trashed | No | About to be emptied. |
Trashed articles still exist in the database. They are only removed when you click Empty Trash.
3.2 Publishing Dates
The Publishing tab has two date fields:
- Start Publishing: the article becomes visible at this moment.
- Finish Publishing: the article becomes invisible after this moment.
Both fields are optional. Combined with the Published status, they let you:
- Schedule news to go live at 09:00.
- Expire promotions automatically.
- Stage a press release in advance.
Joomla compares these dates against the server time and the site timezone.
3.3 Featured Articles
Marking an article as Featured does two things:
- It adds a row to
#__content_frontpage. - It makes the article appear on any "Featured Articles" menu item.
The screen Content → Featured Articles shows only featured articles and lets you reorder them. This is how the classic Joomla front-page blog works.
4. Articles and Categories
4.1 The One-to-Many Rule
Every article belongs to exactly one category. A category contains many articles.
There is no "multi-category" option in core Joomla. If an article needs to relate to several topics, use Tags instead.
4.2 What the Category Gives the Article
Choosing a category is more than picking a label. The category provides:
- A place in the site's information architecture.
- Inherited Access Control rules (unless overridden on the article).
- A URL segment, for example
/news/joomla-6-released. - A workflow binding (since Joomla 4).
- A default set of custom fields.
- Default display options (layout, show author, show date, and so on).
4.3 Moving Articles Between Categories
You can move articles in two ways:
- Edit one article and change the Category field.
- Batch process in the article list: tick rows, then use the toolbar Batch action to Move or Copy.
The Batch action can also change language, change access level, or add tags.
5. Articles on the Frontend
5.1 Menu Item Types for Articles
Joomla provides several menu item types that display articles:
| Menu Item Type | What it shows |
|---|---|
| Single Article | One specific article. |
| Featured Articles | All articles marked Featured, in blog layout. |
| Category Blog | Articles in a category with leading, intro, and links. |
| Category List | Articles in a category as a sortable, paginated table. |
| List All Categories | A tree of categories under a chosen root. |
| Create Article | A frontend submission form. |
| Archived Articles | The archive index. |
5.2 Layout Options for Category Blog
The Category Blog is the most flexible layout. You can configure:
- Leading articles: shown full-width at the top.
- Intro articles: arranged in one to six columns.
- Links: title-only entries after the intros.
- Pagination: page size and pagination links.
- Ordering: by date, hits, ordering field, alphabetical, or random.
You can set these options globally, per category, or per menu item. The most specific setting wins.
5.3 URL and Routing
With SEF URLs enabled, Joomla builds clean URLs from the category tree and the article alias:
/news → category root (menu item)
/news/national → child category
/news/national/election-2026 → article inside the child category
Joomla 6's router resolves these nested paths automatically, as long as your aliases are unique within their parent category.
5.4 The "Read More" Link
When the editor inserts a Read More break:
- Category and Featured views show only the intro text.
- Joomla appends a Read more link to the single-article view.
- The link text can be customised globally or per menu item.
Without a Read More break, blog layouts show the entire article. That is rarely what you want on a homepage.
6. Editors, Images, and Media
6.1 The Default Editor
Joomla 6 ships with TinyMCE as the default WYSIWYG editor.
- It is configured under
Plugins → Editor - TinyMCE. - You can configure three sets (0, 1, 2) and assign each set to different User Groups.
- Toolbar buttons, allowed HTML tags, and content CSS are all configurable.
Each user can also pick a different editor in their profile under Basic Settings.
6.2 Editor Buttons (XTD Plugins)
Below the editor, Joomla shows extra buttons rendered by Editor Button plugins. The most useful buttons are:
- Article: insert a link to another article.
- Image: pick or upload an image from the Media manager.
- Page Break: split a long article into multiple pages.
- Read More: insert the intro/full split.
- Contact, Menu, Module: insert other Joomla content.
6.3 Structured Images on an Article
The Images and Links tab has two structured image slots:
- Intro Image: shown in blog and category views above the intro text.
- Full Article Image: shown on the single-article view.
You can also embed images in the body through the editor. Use the structured slots when you want predictable layout in lists.
6.4 The Media Manager
The Media manager lives at Content → Media.
- The default root folder is
images/. - You can organise subfolders per year, per section, or per editor.
- It supports drag-and-drop uploads, in-browser cropping, and alt-text editing.
- Per-group permissions control who can upload or delete files.
A practical tip: enforce a folder convention from day one. Restructuring later breaks every embedded image URL.
7. Custom Fields
7.1 Why Custom Fields
Sometimes "title plus body" is not enough:
- Events need a date, a location, and a price.
- Recipes need a prep time and a serving count.
- Staff bios need a job title and a phone number.
Custom Fields let editors fill in structured extra data without building a custom component.
7.2 Field Groups and Fields
You manage them under Content → Fields → Field Groups, then Fields.
- A Field Group becomes a tab on the article edit screen.
- A Field belongs to one group and has a type (text, list, calendar, media, user, SQL, subform, and more).
- You assign a field to one or more categories. Articles outside those categories do not see the field.
7.3 Field Types Worth Knowing
| Type | Use it for |
|---|---|
| Text / Textarea | Short or long free text. |
| List / Radio / Checkboxes | Pick from a fixed set of options. |
| Calendar | Dates and times. |
| Media | Pick an image or video from Media. |
| URL / Email / Integer | Validated input. |
| User | Pick a Joomla user. |
| SQL | Pick from a database query. |
| Subform | Repeating group of fields (FAQs, gallery rows). |
| Editor | A full WYSIWYG editor for a custom long-text field. |
7.4 Rendering Custom Fields
You have three options to show custom field values on the frontend:
- Automatic: Joomla renders the fields above or below the article (a group setting).
- Shortcode: use
oranywhere in the body. - Template override: full control inside
templates/your_template/html/com_content/article/default.php.
8. Tags
8.1 Tags vs Categories
Categories and Tags look similar but solve different problems:
| Use a Category when… | Use a Tag when… |
|---|---|
| The article belongs to one place. | The article relates to many topics. |
| Hierarchy matters. | You only need flat, cross-cutting labels. |
| You need ACL or a workflow. | You want discovery and filtering. |
| The URL should reflect the structure. | The URL is not critical. |
Categories define what content is.
Tags describe what content is about.
8.2 Assigning Tags
- On the article edit screen, use the Tags field on the Content tab.
- Type to autocomplete an existing tag, or type a new tag and press Enter.
- You can also batch assign tags from the article list.
Tags live in #__tags. The link between articles and tags is stored in #__contentitem_tag_map.
8.3 Tag-driven Menu Items
Joomla ships three menu item types for tags:
- Tagged Items: all items (articles, contacts, and more) with one or more tags.
- List of all Tags: the tag cloud or index.
- Compact list of tagged items: a leaner variant.
These menu items are perfect for "related content" blocks or topic landing pages.
9. Multilingual Articles
9.1 Multilingual is Built into the Core
Joomla speaks many languages out of the box. You do not need a paid extension or a separate database.
- You create one article per language. Each one is a separate row in
#__content. - Associations link the translations of "the same" article together.
- A Language Switcher module lets visitors flip between languages.
- Menus, modules, categories, and articles all carry a
languagefield.
This is one of the strongest reasons to choose Joomla over WordPress for a serious multilingual site.
9.2 The Three Pieces You Need
| Piece | Where to set it up |
|---|---|
| Installed languages | System → Manage → Languages → Install |
| Content Languages | System → Manage → Languages → Content |
| Language plugin | Plugins → System - Language Filter (enable) |
The Language Filter plugin is what makes Joomla detect, switch, and route by language.
9.3 Article-level Language
On the article's Content tab, the Language field offers:
*: All. The article is shown regardless of the active language.nl-NL,en-GB,de-DE, and so on: bound to that specific Content Language.
A Dutch visitor never sees an English-only article when the Language Filter is on. The same rule works the other way around.
9.4 Associations
The Associations field on the Content tab lets you link the equivalent article in each other Content Language.
For example, "Joomla 6 Released" (en-GB) connects to "Joomla 6 Uitgebracht" (nl-NL). The frontend Language Switcher then takes a visitor from one translation to the other on the same screen.
The same mechanism exists for categories, menu items, and modules. Associate them all for a clean multilingual experience. Associations are stored in #__associations.
9.5 Multilingual Pitfalls
- A menu item set to "All Languages" only routes to articles with language
*. Language-specific articles need language-specific menu items. - Forgetting to associate a category often sends the Language Switcher to the homepage instead of the matching page.
- A Dutch article in an English-only menu tree is invisible. Check the menu's language, not only the article's.
- Search and Smart Search index per language. Re-index after enabling a new language.
10. Workflows and Version History
10.1 What is a Workflow?
A workflow turns the simple Published/Unpublished switch into a multi-step editorial process. For example:
Draft → Review → Approved → Published
Draft → Legal Review → Published
Draft → Translation → Review → Published
Each step is a Stage and each arrow is a Transition.
10.2 Where Workflows Live
Workflows are managed under Content → Workflows:
- Define one or more Workflows (named processes).
- Define Stages inside each workflow.
- Define Transitions between stages, with ACL rules.
- Bind a workflow to a Category through the category options.
10.3 Editorial Reality
- Editors only see the transitions they are allowed to trigger.
- The article's "Stage" replaces the simple status pill in the list view.
- Combine workflows with notifications so reviewers get an email when something lands in their queue.
- Workflows are per category, so different sections can use different editorial processes.
10.4 Every Save is a Version
By default, every save of an article creates a row in #__history.
- Each version is a JSON snapshot of the article.
- The optional Version Note is saved with it.
- You access versions through the Versions button on the toolbar.
10.5 What You Can Do With Versions
- Preview any past version side-by-side.
- Compare two versions field by field.
- Restore a past version. This creates a new "current" version.
- Keep a version so it is protected from automatic cleanup.
- Delete old versions manually.
10.6 How Many Versions Are Kept?
The setting lives in System → Global Configuration → Articles → Integration → Maximum Versions.
- The default is
10. - Set it to
0for unlimited versions. - Versions flagged as "Keep" are never auto-deleted.
Set this number with care. A value of 0 plus a busy editorial team can make the #__history table grow very fast.
11. Access Control (ACL) on Articles
11.1 Two Distinct Concepts
People often mix two different ACL concepts in Joomla:
| Concept | Question it answers |
|---|---|
| Access (Viewing Access Level) | Who can see this article? |
| Permissions (Actions) | Who can do what with this article? |
The model is the same as for Categories. Articles just sit one level deeper.
11.2 Viewing Access Level
You set the access level on the article's Content tab. Joomla ships with five built-in levels:
- Public
- Guest
- Registered
- Special
- Super Users
A Registered-only article never appears in any menu, search result, feed, or module for a guest. You can also create custom access levels for paid memberships or staff-only areas.
11.3 Permissions per User Group
The Permissions tab of a single article controls these actions:
| Action | Meaning |
|---|---|
| Delete | Delete this article. |
| Edit | Edit this article. |
| Edit State | Publish, unpublish, archive, or trash. |
| Edit Own | Edit only if the user is the author. |
| Edit Custom Field Value | Change custom field values. |
11.4 The Inheritance Chain
Permissions flow from top to bottom:
Global Configuration
└── Component (com_content)
└── Category
└── Article
At each level you can set a permission to:
- Inherit: take the value from the parent.
- Allowed: grant the permission.
- Denied: a hard block. You cannot override it at a lower level.
A practical rule: Deny at the highest level you can; allow at the lowest level you must.
11.5 Frontend Editing
There are two ways to let users edit articles on the frontend:
- The inline edit pencil shown next to the title for users with Edit or Edit Own.
- A Create Article menu item with the full edit form for authors with Create on the chosen category.
Pair frontend editing with a workflow so submissions land in Draft for staff review.
12. Modules Around an Article
12.1 Article-related Modules
Joomla 6 ships with several modules that work with articles:
| Module | What it does |
|---|---|
| Articles - Latest | The N most recent articles, optionally filtered by category. |
| Articles - Newsflash | A random or fixed selection of intros. |
| Articles - Popular | The most-viewed articles, based on hits. |
| Articles - Related | Related items based on metadata keywords. |
| Articles - Categories | A list of subcategories under a parent. |
| Articles - Category | A list of articles in a chosen category. |
| Articles - Archive | The classic month/year archive. |
12.2 Assigning Modules to Article Pages
Modules attach to menu items, not directly to articles. To show a module on one specific article:
- Create a hidden menu item of type Single Article for that article.
- Assign the module to that menu item.
- Or use a third-party Advanced Module Manager to apply "show on article X" rules.
12.3 Loading Modules Inside an Article
With the Content - Load Module plugin enabled, you can inject modules straight into the article body:
This is powerful, but it is also easy to abuse. Use it sparingly and document where you use it.
13. Under the Hood (Developer View)
13.1 Important Database Tables
Articles touch many tables. The most important ones are:
#__content — the articles themselves
#__content_frontpage — featured-article flags
#__content_rating — voting and rating
#__history — version snapshots
#__contentitem_tag_map — article-to-tag link
#__fields, #__fields_values — custom fields
#__categories — the category tree
#__assets — one ACL rules row per article
#__associations — multilingual links between rows
#__workflow_associations — current workflow stage per item
13.2 How the Tables Connect
#__categories
▲
│ catid
│
#__users ◀─created_by─ #__content ─asset_id─▶ #__assets
│
┌──────────────┬───────────────┐
│ │ │
▼ ▼ ▼
#__history #__content_ #__contentitem_
(versions) frontpage tag_map
(featured) │
▼
#__tags
#__fields ──defines──▶ #__fields_values ──refers to──▶ #__content
#__associations ──links translations of──▶ #__content
The asset_id column in #__content links each article to its row in #__assets. That row stores the ACL rules for the article.
13.3 Key Fields in #__content
id
asset_id
title, alias
introtext, fulltext
state (1 published, 0 unpublished, 2 archived, -2 trashed)
catid
created, created_by, created_by_alias
modified, modified_by
publish_up, publish_down
featured
access
language
metadesc, metakey, metadata
attribs (JSON: per-article display options)
images (JSON: intro and full image slots)
urls (JSON: A/B/C link slots)
version, hits
The columns attribs, images, and urls are JSON blobs. Read them with json_decode().
13.4 Articles API in PHP - Modern Way
The modern way to load an article uses the MVC factory:
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$factory = $app->bootComponent('com_content')->getMVCFactory();
$model = $factory->createModel('Article', 'Administrator', ['ignore_request' => true]);
$article = $model->getItem(42);
echo $article->title;
echo $article->introtext;
The Administrator model returns the raw record. The Site model applies routing and access checks.
13.5 Articles API in PHP - Quick Read
For a simple read on the frontend you can use the query builder directly:
use Joomla\CMS\Factory;
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true)
->select(['id', 'title', 'alias', 'introtext'])
->from($db->quoteName('#__content'))
->where($db->quoteName('state') . ' = 1')
->order('created DESC');
$db->setQuery($query, 0, 10);
$rows = $db->loadObjectList();
Use the API or the model when you need ACL, routing, or events. Use the query builder when you just need rows.
13.6 Events to Hook Into
Plugins can react to several content events:
| Event | When it fires |
|---|---|
onContentBeforeSave |
Just before insert or update (context com_content.article). |
onContentAfterSave |
Just after a successful save. |
onContentBeforeDisplay |
Before the article is rendered. |
onContentPrepare |
Lets plugins transform introtext and fulltext. |
onContentAfterDisplay |
After the article body has been rendered. |
onContentChangeState |
Publish, unpublish, archive, or trash. |
onContentBeforeDelete / onContentAfterDelete |
Around deletion. |
This is how core content plugins (Load Module, Page Break, Vote, Email Cloaking) inject themselves.
13.7 Template Overrides
Override the article and category views in your template:
templates/your_template/html/com_content/article/
default.php → single article
templates/your_template/html/com_content/category/
blog.php → category blog
blog_item.php → one entry in the blog
blog_links.php → link entries
default.php → category list
default_articles.php → the article rows
templates/your_template/html/com_content/featured/
default.php
templates/your_template/html/com_content/archive/
default.php
Override only what you need. Copy the core file first, then change it.
13.8 Performance and Caching
A busy article site lives or dies by caching. Joomla offers several layers:
| Layer | Where | What it caches |
|---|---|---|
| System cache (Conservative) | Plugin: System - Cache | Whole rendered pages, per URL and user group. |
| Page cache (Progressive) | Same plugin, different mode | Per-user pages. More granular, less hit-rate. |
| View cache | Global Configuration → System → Cache: ON | The output of component views. |
| Module cache | Per-module → Advanced → Caching | Rendered module HTML. |
| Browser cache | .htaccess / Apache headers | Static assets (images, CSS, JS). |
Database tuning also matters at scale:
- Use indexes on
#__contentforstate,catid,access, andlanguage. Joomla ships sensible defaults, but verify them after migrations. - Use a real opcode cache (OPcache) for PHP. It is not optional on production.
- Use a Redis or Memcached session and cache handler for clustered sites.
- Keep Maximum Versions sensible so
#__historydoes not outgrow#__content.
A rule of thumb: enable System Cache (Conservative) and Module Cache as a baseline. Switch to Progressive only when the site is mostly logged-out.
14. The Web Services API and Headless Joomla
14.1 What the Web Services API Is
Joomla 4 introduced a built-in REST API for core content. Joomla 6 continues and improves it.
- It lives under
/api/index.php/v1/.... - It speaks JSON in and JSON out, JSON-API style.
- It is backed by the same MVC models the backend uses. ACL and events apply.
- Articles, categories, tags, users, menus, and more are exposed by default.
This is what makes Joomla a credible headless or hybrid CMS in 2026.
14.2 Enabling the API
The API lives in its own application:
- Enable the plugin Web Services - Content (and the other Web Services plugins you need).
- Check
System → Global Configuration → Site → Default Public Access Level for API. This controls anonymous reads. - Authentication uses the API Authentication plugins:
- Web Services - Token: a Joomla token per user, set in the user profile.
- Basic Auth: username and password. Fine for server-to-server over TLS.
A simple call looks like this:
curl -H "X-Joomla-Token: <token>" \
https://example.test/api/index.php/v1/content/articles
14.3 Common Article Endpoints
| Method and Path | What it does |
|---|---|
GET /v1/content/articles |
List articles (filter, pagination, fields). |
GET /v1/content/articles/{id} |
Read one article. |
POST /v1/content/articles |
Create an article. |
PATCH /v1/content/articles/{id} |
Update fields. |
DELETE /v1/content/articles/{id} |
Trash an article. |
GET /v1/content/categories |
List categories. |
GET /v1/content/articles?filter[category]=8 |
Filter by category. |
GET /v1/fields/content/articles |
Custom field definitions. |
The responses follow JSON-API conventions: data, attributes, links, meta, and included.
14.4 Headless Use Cases
Once articles are reachable over HTTP and JSON, Joomla can power:
- A Next.js, Astro, or Nuxt frontend with Joomla as the editing back-end.
- A mobile app that fetches the same articles as the website.
- A digital signage or kiosk that pulls headlines on a schedule.
- A microsite on its own domain, editorially owned by the main site.
- An AI or LLM pipeline that ingests fresh content via the API.
Editors keep the familiar Joomla backend. Frontends become disposable.
14.5 CLI and Automation
Joomla ships a CLI and a Console application:
php cli/joomla.php extension:list
php cli/joomla.php user:add
Combined with the REST API, you can script:
- Bulk article imports from another CMS.
- Nightly republish or unpublish jobs.
- Health checks and content audits.
- Cache clears after a deploy.
14.6 API Pitfalls
- The API is off by default for a reason. Leaving it open without rate-limiting invites abuse.
- The "Default Public Access Level for API" setting is global. Review it before enabling Web Services.
- API tokens are per user. Rotate them and tie API users to a dedicated User Group with the minimum permissions.
- Custom fields are exposed through a separate endpoint. Do not expect them inside the main article payload by default.
- Put the API behind HTTPS only. Always.
15. SEO and Metadata
15.1 Per-article SEO
The Publishing tab holds the article's SEO fields:
- Meta Description: used in
<meta name="description">. - Meta Keywords: still written, but largely ignored by search engines.
- Author and Rights: map to
<meta name="author">and<meta name="rights">. - Robots: control crawling with values like
index, followornoindex, nofollow. - External Reference: a free-text id for integrations.
The article's alias drives the URL slug.
15.2 Featured Snippet Hygiene
- Keep titles unique and meaningful. They become the
<h1>and the page<title>. - Write a real intro paragraph. Search engines often quote it.
- Use structured headings (
<h2>,<h3>) inside the body. - Add alt text to every image.
- Use canonical URLs. The menu item closest to the article should win.
15.3 Sitemap and Search
- Joomla has Smart Search (
com_finder) built-in. Enable the plugins and run the index once. - Use a sitemap extension such as OSMap or JLSitemap to expose articles to Google.
- Combine sitemaps with a tag-driven landing-page strategy to cluster topics.
16. Common Mistakes and Pitfalls
16.1 Forgetting the Read More Break
Symptom: the homepage shows ten 2,000-word articles in full.
Fix: insert a Read More break in every long article, or set a Truncate option on the menu item.
16.2 Alias Collisions
Two articles with the same alias inside the same category cause routing problems. Joomla appends -2 or -3 on save, but copy-paste imports often skip this safety net.
Always make sure the alias is unique within the category, not only globally.
16.3 Status vs Access vs Workflow
An article can be invisible for many reasons:
stateis not1(published).publish_upis in the future, orpublish_downis in the past.accessis higher than the visitor's Viewing Level.- A workflow stage maps to "Unpublished".
- The parent category is unpublished or restricted.
- The
languagedoes not match the active site language.
Check all six before blaming the template.
16.4 Workflows Without Training
A workflow that nobody understands is worse than no workflow.
- Document the stages and transitions.
- Train editors on what "Submit for Review" actually does.
- Start simple: two stages and one transition. Grow from there.
16.5 The Version-history Table Eating Disk
Unlimited versions, large intro images, and frequent saves can grow #__history into the gigabytes. Set a sensible Maximum Versions in Global Configuration and prune the existing history.
16.6 Embedded Media URLs
Inline image tags like <img src="/images/2024/photo.jpg"> break if you reorganise the Media folder later. Use the structured intro and full slots, and template overrides where layout matters. Keep editors out of inline styling decisions.
17. Best Practices and Quick Reference
If you remember only a few things from this article, remember these:
- Pick the category before you start writing. It drives ACL, URL, and workflow.
- Always insert a Read More break in long articles.
- Use Tags for topics and Categories for structure.
- Set a sensible Maximum Versions value so
#__historydoes not explode. - Enable System Cache and Module Cache by default. Add OPcache on production.
- Put the Web Services API behind HTTPS, tokens, and a low-privilege user group.
- Use the structured intro and full image slots, not inline HTML, when layout matters.
Cheat Sheet
CREATE Content → Articles → New
CATEGORY Required — every article needs one
READ MORE Editor → Read More button (system-readmore <hr>)
FEATURE Toggle Featured in the list or on edit
SCHEDULE Publishing tab → Start / Finish Publishing
WORKFLOW Bind on the Category Options tab
VERSIONS Toolbar → Versions (set max in Global Config)
TAGS Content tab → Tags field
FIELDS Content → Fields → Field Groups, assign per category
ACCESS Content tab → Access (Viewing Level)
PERMISSIONS Permissions tab (per group, per article)
LAYOUT templates/{tpl}/html/com_content/article/ or /category/
ROUTING Enable SEF, use unique aliases within a category
EVENTS onContentPrepare, onContentBeforeSave, onContentAfterSave
MULTILINGUAL System → Languages + Plugin: System - Language Filter
ASSOCIATIONS Content tab → Associations (link translations)
REST API /api/index.php/v1/content/articles (+ token plugin)
CLI php cli/joomla.php <command>
CACHE System - Cache plugin + OPcache + (Redis at scale)
18. Summary
In Joomla, an article is not just "a page of text". It sits at the centre of almost every Joomla feature:
- Content: title, body, intro, full text, images.
- Structure: exactly one category, optional tags.
- Lifecycle: drafts, versions, workflows, scheduling.
- Permissions: who sees it, who edits it, who publishes it.
- Languages: first-class multilingual through associations.
- SEO: alias, metadata, routing, structured headings.
- Performance: multi-layer caching, OPcache, optional Redis.
- Integration: events, PHP API, REST API, CLI, custom fields, modules.
- User experience: for editors writing it and visitors reading it.
A well-managed article system saves time, prevents bugs, and makes a Joomla website easier to maintain for years. A neglected one creates problems that grow with the website.
If you are planning a new Joomla site, migrating from an older version, or you suspect that your current article setup causes problems, it pays to look at articles, categories, and workflows together. They form the quiet foundation under almost everything Joomla does.


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


