The Joomla generator meta tag is a single line in the HTML head, <meta name="generator" content="Joomla! - Open Source Content Management">. Joomla adds it in the document class. There is no switch for it in Global Configuration on Joomla 3, 4, 5, or 6. Remove it with setGenerator('') before the head is rendered, or with a system plugin. An empty string omits the tag. null is the wrong value and can fatal on PHP 8.
The tag does not contain your version number. Removing it does not change Google rankings. It only drops one fingerprint. RSS feeds, the administrator login page, and administrator/manifests/files/joomla.xml still identify the CMS unless you handle those separately.
What you will learn
- The exact tag Joomla prints, and why it is not a version number
- How to see it in HTML and in RSS
- The template one-liner, and why it disappears on the next template update
- Why
setGenerator(null)is unsafe - What still gives the site away after the tag is gone
What the tag is
HTML’s generator meta names the software that built the page. Joomla sets that string when it creates the HTML document. It is not read from a menu item, not stored in the database, and not a language string you can override. The same property is written into RSS and Atom as a <generator> element.
On current Joomla 3.10, 4, 5, and 6 the content is only:
<meta name="generator" content="Joomla! - Open Source Content Management">
Very old releases (Joomla 1.5 and early 2.5) put the version in that string. That stopped years ago. If a scanner claims it learned “Joomla 3.9.28” from this meta tag, it learned it somewhere else.
What removing it does, and what it does not
| Claim | Reality |
|---|---|
| Hides the Joomla version from attackers | The version is not in this tag. It is in administrator/manifests/files/joomla.xml and in the administrator’s System Information screen |
| Improves Google rankings | No. Google does not use meta name="generator" as a ranking signal |
| Hurts SEO | No, as long as you do not also delete the robots meta tag |
| Makes the site invisible to scanners | No. /media/system/js/core.min.js, /administrator/, and Cassiopeia paths still look like Joomla |
Removed by a Joomla or template update if you only edited index.php |
Yes. A template update replaces that file |
Removed from RSS if you only call setGenerator inside <head> after the head include |
No. Feeds never render that head block |
Treat this as housekeeping, not as a security patch. An outdated Joomla site with the tag removed is still outdated. Update path: how to update Joomla.
Step 1: See the tag before you change anything
- Open the public homepage.
- View source (not only the inspector). Search for
generator. - You should find the meta line above. Joomla 3 often writes it self-closed (
/>). Joomla 4 and newer usually do not. - Open the feed: add
?format=feed&type=rssto the site URL, or use the RSS link in the page. Search for<generator>. The same sentence is there. - Optional: open
/administrator/and view source. The login page carries the tag too.
If the line is missing already, a plugin or the template is stripping it. Do not add a second strip until you know which one.
Step 2: Prefer a plugin over a template edit
A system plugin runs on every HTML and feed response and survives template updates. Infyways publishes Remove Meta Generator for this. Version 1.4 is for Joomla 4, 5, and 6. It clears or replaces the generator on the public site, can clean RSS and Atom, and can drop the X-Powered-By header. It does not touch the administrator. Listing: Joomla Extensions Directory.
- Install the zip and enable System – Remove Meta Generator.
- Set generator to remove, or replace it with your own brand text if you want a tag with different content.
- Leave the robots option alone unless you have a reason to change indexing. Deleting
meta name="robots"can drop anoindexyou still need, or strip a normal index directive. - Clear Joomla cache and any CDN cache.
- View source on the homepage and on one article. Then check the RSS feed.
Joomla 3 is not a target of the 1.4 build. On 3.10 use the template line in the next step, or stay on a plugin build that still lists Joomla 3.
Step 3: Or set an empty generator in the template
This works on Joomla 3, 4, 5, and 6. In templates/YOUR_TEMPLATE/index.php, before <jdoc:include type="head" /> and before <jdoc:include type="metas" />:
<?php
$this->setGenerator('');
?>
Use an empty string. Do not pass null. The document API types setGenerator as a string. On PHP 8 a null argument becomes a fatal once that type is enforced. An empty string is what makes the renderer skip the tag. Joomla only prints the meta when getGenerator() is non-empty.
Put the line at the top of the file if you are unsure. Code after the head include is too late: the meta block has already been built.
A template update overwrites index.php. Put the line in a child template, or use the plugin. Do not edit libraries/src/Document/HtmlDocument.php or libraries/joomla/document/html/html.php. The next Joomla update puts the tag back and can break the core file.
Step 4: Cover feeds, not only the homepage
The template line never runs for format=feed. A plugin event does. This is the body of a system plugin method. On Joomla 3.8 and newer, and on 4, 5, and 6, Joomla\CMS\Factory is available without the compatibility plugin:
public function onBeforeRender()
{
$app = Factory::getApplication();
if (!$app->isClient('site')) {
return;
}
$doc = $app->getDocument();
$type = $doc->getType();
if ($type !== 'html' && $type !== 'feed') {
return;
}
$doc->setGenerator('');
}
onBeforeRender is early enough for HTML and for RSS. onBeforeCompileHead is HTML-only, so a head-only hook leaves the feed element in place. Skip non-HTML types such as JSON and raw so you do not touch component output that is not a document head.
On Joomla 3.7 and older, swap Factory::getApplication() for JFactory::getApplication() and isClient('site') for isSite().
Step 5: Confirm it is gone, including cache
- View source on the homepage, an article, and a category blog.
- Search for
name="generator". No match means the Joomla tag is gone. A match with different content means a template or extension hardcoded its own tag.setGeneratorwill not delete a string that was echoed by hand. Search the template forgeneratorand remove that line. - Open the RSS URL and confirm there is no
<generator>Joomla!element, if you used the plugin oronBeforeRender. - Clear System → Maintenance → Clear Cache, then the host cache or Cloudflare, or you will keep seeing the old HTML.
- Check
/administrator/only if you intended to change it. The JoomlaX plugin leaves admin pages alone on purpose.
Other fingerprints people confuse with this tag
| Signal | What it is | Removed by setGenerator? |
|---|---|---|
meta name="generator" |
HTML fingerprint, no version | Yes, if you set an empty string in time |
RSS <generator> |
Same property, feed renderer | Only if the call runs for feed documents |
X-Powered-By: PHP/x.y |
Server header, not Joomla’s meta tag | No. Turn it off in PHP or in the plugin’s header option |
administrator/manifests/files/joomla.xml |
Core manifest, includes the version | No. This file is the real version leak |
/media/system/js/core.min.js and /administrator/ |
Paths and the login screen | No |
meta name="robots" |
Indexing instructions | Should stay. Unrelated to the generator |
Blocking the manifest is a hosting or Admin Tools job, not a meta-tag job. Hiding files is still weaker than installing updates. If the site is on Joomla 3, plan the move instead of collecting hide-the-CMS tricks: Joomla upgrade services.
SEO
Removing the generator tag does not move rankings. Google indexes the visible page, links, and a handful of meta tags it actually reads (description, robots). generator is not one of them. More on what does matter: Joomla SEO.
The change that does hurt SEO is a plugin option that deletes every robots meta. Leave that control on “leave” unless you are setting a specific policy, such as index, follow on purpose.
Key takeaways
- The tag says Joomla. It does not say which version.
- There is no Global Configuration checkbox. Use
setGenerator('')or a plugin. - Never pass
null. Never edit files underlibraries/. - A template edit dies on the next template update and never touches RSS.
- Removing the tag does not change SEO. Do not remove the robots meta while you are there.
- Update Joomla. Hiding the tag is not a substitute.
Frequently asked questions
How do I see the Joomla generator meta tag?
View source on the homepage and search for generator. The default content is Joomla! - Open Source Content Management. The same text is in the RSS <generator> element.
How do I remove the Joomla meta generator from the head?
Call $this->setGenerator('') in the template before the head include, or enable a system plugin that does it on onBeforeRender. Empty string, not null.
Will removing the generator tag affect SEO?
No. Google does not use that meta tag for ranking. Leave meta name="robots" in place.
Does this tag reveal my Joomla version?
Not on Joomla 3.10, 4, 5, or 6. The version is in administrator/manifests/files/joomla.xml, not in the generator meta.
Does Joomla 5 or 6 still add the tag?
Yes. There is still no core switch. The same setGenerator('') call works, or use Remove Meta Generator 1.4.
Will a Joomla update put the tag back?
A core update does not restore a plugin setting. A template update does restore index.php if you edited the parent template. Core file hacks under libraries/ are overwritten.
Does the template line remove it from RSS?
No. Feeds do not load index.php. Use onBeforeRender or a plugin that cleans feed output.
Is setGenerator(null) safe on PHP 8?
No. Pass an empty string. Null does not match the string argument and can fatal.
Can I remove it without editing files?
Yes. Install Remove Meta Generator, enable it, clear cache, and view source.
