SEO

Structured data in Joomla 5 and 6, without an extension

Structured data in Joomla 5 and 6, without an extension

Joomla 5 and 6 have Schema.org structured data in core. How the schemaorg plugins work, how to set them up, and how to avoid two sets of markup.

Since Joomla 5 there is structured data in the core. No extension, no copied JSON in a custom HTML module. Most sites that upgraded never switched it on, and a fair number of the sites that did now send Google two different stories about who they are. Here is how the built-in Schema.org support works and how to set it up so it helps.

What structured data does, and what it does not do

Structured data is a block of JSON-LD in the page head that tells a search engine, in a fixed vocabulary, what the page is: an article with an author and a date, an event with a start time and a venue, a recipe with a cooking time. Search engines use it to understand the page and, for some types, to show a richer result: event dates under the link, recipe cards, job listings.

It is not a ranking switch. Marking up a thin page as an Article does not make it rank. And a rich result is never guaranteed; Google decides per query whether to show one. What you do get is fewer guesses. The search engine no longer has to work out from your layout which line is the author and which number is the date.

The pieces Joomla ships

Go to System, Manage, Plugins and filter on the type schemaorg. You will find a plugin per type: Article, BlogPosting, Book, Event, JobPosting, Organization, Person, Recipe, and a Custom plugin for anything else. Next to them sits System - Schema.org, the plugin that ties it together and writes the JSON-LD into the page.

Two levels work together:

  • The site level. In System - Schema.org you choose a base type, Organization or Person, and fill in the name, URL and logo or image. This becomes the publisher node that every page refers to.
  • The item level. Edit an article and you get a Schema tab. Pick a type there, fill in the fields it offers, and that article gets its own node, linked to the site node.

Joomla outputs all of it as one @graph, so the article, the web page, the website and the publisher are connected instead of floating around as separate blocks.

Set it up in this order

  1. Fill in the site level first. Open System - Schema.org, pick Organization for a business or Person for a personal site, and enter the real name, the canonical URL with https://, and a logo that is publicly reachable. An empty name here gives every page a publisher without a name.
  2. Enable only the types you will use. A brochure site needs Organization and maybe Article. An event venue needs Event. Leave the rest disabled so editors do not get a dropdown full of options that make no sense for the site.
  3. Give the right content a type. Open the articles that matter, the cornerstone pages, events and recipes, and choose a type on the Schema tab. BlogPosting for dated posts, Article for evergreen pages. For Event, fill in at least the start date and the location; an Event without those is the kind of markup Google flags as invalid.
  4. Check the output. View the page source and search for application/ld+json. You should see one block with a @graph array.

The duplicate markup problem

This is where most sites go wrong. Before Joomla 5, structured data came from somewhere else: an SEO extension, a template framework with its own microdata, a snippet pasted into the template's index.php. Those do not switch themselves off when you upgrade. Turn on the core plugins and the page now carries two Organization nodes with different names or logos, or an Article in JSON-LD next to an older one in microdata.

Search engines do not average conflicting markup. They pick one, or ignore both. So before you enable the core plugins, look at what the page already outputs. Search the page source for ld+json, itemscope and itemtype. Anything you find besides the Joomla graph has a source, and you should keep exactly one. If an extension does it well and you are happy with it, leave System - Schema.org disabled. If you move to the core, disable the extension's structured data option and remove pasted snippets from the template.

Test with the right tools

Two free tools, and they answer different questions:

  • Schema Markup Validator at validator.schema.org checks whether the markup is valid Schema.org. It shows every node it finds, which makes duplicates easy to spot.
  • Rich Results Test from Google checks whether a page qualifies for a rich result in Google and lists the missing required fields per type.

Run both on a page with a type set and on one without. Afterwards, Google Search Console reports problems per type under the Enhancements section once Google has crawled the pages again. Give that a few days.

When the Custom plugin is the answer

Schema.org has hundreds of types and Joomla ships nine. For a FAQ page, a local business with opening hours or a product, use the Custom plugin: it lets you paste a JSON-LD block on the item's Schema tab. Write it against the Schema.org documentation, validate it before saving, and keep it honest. Markup that describes things that are not on the page, such as reviews nobody wrote, is exactly what search engines penalise.

A short checklist

  • System - Schema.org has a real name, URL and logo.
  • Only the types you need are enabled.
  • Key articles have a type on their Schema tab.
  • The page source contains one structured data source, not two.
  • Both validators come back clean.

Half an hour of setup, and every new article your editors publish can carry correct structured data from then on.

Stuck on something else?

Doctor Joomla is a project of Cloudfaction, a Dutch agency building and maintaining Joomla sites since 1999. The articles are made with the help of AI, so tell us if something does not match your screen. Mail info@cloudfaction.nl if you want someone to look at yours.

Rather have someone look at it

Doctor Joomla is a Cloudfaction project.

A Dutch agency that has been building and running Joomla sites since 1999. If your site needs more than an article can fix, get in touch.