Platforms

Joomla Google reviews plugin: what the text filter deletes

10 August 2026 · JustReview

You do not need a Joomla plugin to put Google reviews on a Joomla site. The whole install is a stylesheet link, one script tag, one init call and an empty container div, and Joomla has two places that accept raw HTML. What you do need is for that script tag to still exist after you press Save, and by default it does not: Joomla strips it twice, once in the editor and once on the way into the database. The div survives, the script does not, and you are left staring at a page that looks like nothing happened.

This post is the exact behaviour, not the folklore. We read the defaults in the Joomla source on 10 August 2026 (branches 5.4 and 6.1, plus the filter package Joomla vendors), and we measured the one live Joomla site running our widget.

Joomla is the rarest platform we see, and that matters here

On 10 August 2026 we took every domain that had served our widget in the previous 18 days, 737 of them, and fetched each home page to fingerprint the platform. 467 answered. Here is the whole board:

PlatformHosts answeringShare of answers
WordPress (no shop)11424.4%
WooCommerce9019.3%
Shopify377.9%
PrestaShop234.9%
Squarespace183.9%
Duda143.0%
Ecwid or Shopware143.0%
Magento132.8%
BigCommerce112.4%
GoDaddy51.1%
Webflow40.9%
Shoper30.6%
IdoSell20.4%
Joomla20.4%
Wix20.4%
Drupal10.2%
No signature13729.3%

Counts overlap slightly, because a handful of sites carry markers of two systems at once. The two Joomla hostnames are the same site behind a production domain and a hosting preview domain, so in practice: one Joomla install, one account.

That number is the honest reason this guide reads differently from the WordPress one. There is no large pile of Joomla installs to average over, so instead of vague advice we did two things that do not need a large sample: we read what Joomla’s own code does to your snippet, and we took the single Joomla site apart to see how it was wired.

What Joomla deletes, and what it keeps

Two filters stand between your clipboard and the page, and they are configured in different places.

The editor filter runs first, in your browser. Joomla ships TinyMCE with a field called Prohibited Elements, defined in plugins/editors/tinymce/forms/setoptions.xml with the default value script,applet,iframe. It is used whenever the set does not defer to the global filters, which is also the default (use_config_textfilters is 0). So the script tag can disappear before the form is even submitted, including for a Super User who believes they have filtering turned off.

The save filter runs second, on the server. Both the article body and the Custom module body are declared with filter="\Joomla\CMS\Component\ComponentHelper::filterText", in administrator/components/com_content/forms/article.xml and administrator/components/com_modules/forms/module.xml. That method reads Global Configuration, Text Filters, and applies the rule for the groups the current user belongs to. For the Default Black List it builds an input filter whose blocked tag list is 23 entries long:

applet, body, bgsound, base, basefont, canvas, embed, frame, frameset, head, html,
id, iframe, ilayer, layer, link, meta, name, object, script, style, title, xml

Note what is on that list besides script: link and style. So a snippet that starts with a stylesheet link loses that too, and the widget can end up unstyled even when someone has managed to smuggle the script through. Note also what is not on the blocked attribute list, which is only action, background, codebase, dynsrc, formaction, lowsrc: id and class are untouched. Your empty container div always survives. That asymmetry is the whole Joomla story in one line.

The default that decides whether it works for you

Joomla does not apply one rule to everybody. The shipped configuration, in installation/sql/mysql/base.sql, assigns a filter type per user group:

User groupDefault text filterWhat happens to the snippet
Super UsersNo FilteringScript survives the save (but TinyMCE may still eat it)
ManagerDefault Black ListScript, link and style removed
AdministratorDefault Black ListScript, link and style removed
PublisherDefault Black ListScript, link and style removed
EditorDefault Black ListScript, link and style removed
AuthorDefault Black ListScript, link and style removed
Registered, Public, GuestNo HTMLEverything removed

This is why the same paste behaves differently for two people on the same site, which is the single most confusing symptom in Joomla support threads. The owner is a Super User and sees the widget. The person who actually maintains the content is an Administrator or a Publisher and their save quietly returns a div with nothing behind it. Nobody is doing anything wrong, and no error is shown.

The opposite failure, measured on a live site

The one Joomla install in our base has the mirror image of that problem, and it is worth showing because it is invisible from the front end.

They did the smart thing with the script: it sits in the template, just before the closing body tag, wrapped in a comment marker, so no filter ever touches it. We crawled 24 pages of that site on 10 August 2026. All 24 carry the stylesheet link, the script and the init call. Zero of them carry the container div. We then rendered three of those pages in a headless browser to be sure the container was not being injected at runtime, and matched every element whose id or class starts with our name: nothing, on all three.

Here is what each of those page views actually costs, measured the same day:

ResourceOver the wireDecodedWhat it is for
Widget JavaScript128 293 B488 265 BNothing on this page
Widget stylesheet15 285 B109 861 BNothing on this page
Reviews API response4 054 B12 630 B21 reviews, average 4.95
Total per page view147 632 B610 756 BZero pixels

So a paying account downloads its own 21 five star Google reviews on every page view of a 24 page site and renders none of them. There is no console error either. We checked our own widget code and the reason is boring: the init call asks for the container, our loading spinner helper returns early when the selector matches nothing, and the fetch then runs anyway. The site owner has no way to see this. That silence is on us, not on Joomla.

If you take one diagnostic away from this page, take that one: a widget that loads is not a widget that renders. The network tab showing a 200 on the reviews call is not evidence that anything is on your page.

Install it so it survives both the filter and the next update

Where you put itSurvives text filterSurvives Joomla updateGood for
Child template index.php, before </body>Yes, templates are never filteredYesThe script and init call, site wide
Template index.php directlyYesNo, an update can overwrite itQuick test only
Article or Custom moduleDiv yes, script noYesThe container div, per page
Global Configuration, filter set to No FilteringYesYesNothing, this is a site wide security decision

The working shape on Joomla is a split, and it is not a workaround, it is the correct layout:

  1. Script once, in the template. Copy your active template to a child template, open its index.php, and paste the stylesheet link, the script tag and the init call just before </body>. Nothing here goes through the text filter, and a child template means the next Joomla or template update does not undo your work.
  2. Container where you want the reviews. In the article, or in a Custom module assigned to a position, paste only the empty div with the widget id. The Default Black List keeps it. If your editor reformats it into oblivion, switch the editor to None for that one save. Remember that a Custom module also wraps your markup in its own div with a mod-custom class, which is a handy hook if you want to add spacing around the widget.
  3. Check the front end in the element inspector, not in view source. View source tells you what the server sent, the inspector tells you what the browser built. On Joomla those two disagree often enough to waste an afternoon.

If you would rather not touch a template file at all, the alternative is a Super User account plus the editor set to None, which lets the script through both filters. It works, and it puts your snippet in a database row that the next content editor can silently delete. We would not choose it.

What we would check first on a Joomla site that “does not work”

  • Open view source and search for the widget name. Container present, script missing means the text filter took it: move the script to the template.
  • Script present, container missing means the opposite: the reviews are being fetched and thrown away, which is the case we measured above. Add the div to the page that should show them.
  • Both present and still nothing on screen means the container is on the page but hidden, usually inside a collapsed tab or an accordion that measures zero at load time.
  • Reviews appear but look unstyled: the stylesheet link was removed, because link is on the same blocked list as script.

None of these need a plugin, a developer or a support ticket. They need the script and the div to be in places where Joomla is not allowed to rewrite them.

Why we are worth the ten minutes

We support Google alongside marketplaces and booking platforms in one widget, one script and one account, which matters more on Joomla than anywhere else: every source you add is zero extra tags on the page, and tags are the fragile part here. The install is the same three lines on every platform, documented in our universal embed instructions, and the widget itself is the same file we measured above, so the numbers on this page are the numbers you get. Plans and limits are on the pricing page, and if you are comparing tools first, our rundown of review widgets in 2026 is the honest version, including where somebody else fits better.

The fair warning, since this page is otherwise about ours: we are a reviews aggregator, not a Joomla extension. There is no Joomla Extensions Directory listing to install, no admin panel inside Joomla, and the snippet is your responsibility once it is in the template. In exchange you get something a Joomla extension cannot give you: the same widget, unchanged, if you move that site to WordPress or Shopify next year.

Ready to try it on your own template? Create an account, connect Google, and copy the snippet from the widget builder. If you want to see the finished thing before you touch index.php, our Google reviews widget page has it running live.

FAQ

Do I need a plugin to show Google reviews on Joomla?

No. A reviews widget is a stylesheet link, one script tag, one init call and an empty container div. Joomla has a Custom module and an editor that both accept HTML, so there is nothing to install. The reason people reach for a plugin is that the snippet often stops working after they press Save, and that is not a missing feature, it is Joomla's text filter removing the script tag from the saved content.

Why does my Joomla article delete the script tag when I save it?

Two separate filters do it. TinyMCE removes script, applet and iframe in the browser before the form is even submitted, because the plugin ships with Prohibited Elements set to script,applet,iframe. Then Joomla filters the saved value again through ComponentHelper::filterText, and for every group except Super Users the default is the Default Black List, which blocks 23 tags including script, link and style. The div survives both, because id and class are not blocked attributes. That is why so many Joomla sites end up with half a widget.

Where should the widget script go on a Joomla site?

In the template, once, before the closing body tag, and ideally in a child template so a Joomla update does not overwrite it. Article and module content go through the text filter on every save, template files do not go through it at all. Then the only thing you paste into the article or Custom module is the empty container div, which the filter leaves alone.

The widget loads but nothing appears on the page. What is wrong?

Almost always the container is missing. The init call looks for an element with the id of the widget, and if it is not on that page the script still downloads and still fetches your reviews, it just has nowhere to draw them. We measured exactly that on a live Joomla site on 10 August 2026: 24 pages carrying the script and the init call, zero pages carrying the container, about 147 KB of transfer per page view and 21 five star reviews delivered to nobody.

Real reviews, live from three sources

This slider is not a screenshot. It pulls our own reviews from Facebook, Capterra and G2 through the same widget you would install.