Platforms
How to add Google reviews to Divi without an extra plugin
Divi ships a module called Testimonial, and that name is the first trap. Those testimonials are sentences you type yourself, so they are marketing copy with a photo attached, not verified Google reviews. The real ones arrive from outside the site, carried by a small piece of JavaScript, and Divi’s only job is to hold that JavaScript somewhere sensible. Which spot you pick decides everything, because a Divi layout has at least four places that accept raw code and each has a different reach: a single module, a single template, or the entire site. On 23 August 2026 we listed every Divi site that had shown our reviews widget in the previous month, 25 hostnames across 20 accounts, and inspected how each one is put together. Seven of them cannot display anything at all, and not one of the seven raises an error that anybody would notice.
Four places that accept raw code, and they are not interchangeable
No Divi tutorial spells this out, and it is the whole story. Your snippet can sit in any of these, and the reach differs wildly.
| Where | Reach | Executes on | Right for |
|---|---|---|---|
| Code Module | One page, or one Theme Builder template | Only where the module sits | The empty div, plus the startup call beside it |
| Text Module | One page | Only where the module sits | Headings and copy around the widget, never the script |
| Theme Options, Integration, head or body | Whole site | Every page load | The shared files: our stylesheet and our script tag |
| Theme Builder global header or footer | Every page using that template | Every page with that template | Something you want site-wide, a footer badge for instance |
Almost everyone trips over the mismatch between rows three and one: shared files injected across the whole site, empty div placed on one page. That is not broken exactly, it just means every other URL on the site downloads our JavaScript, asks our API for reviews and discards them unseen.
What 25 live Divi sites actually do
The method matches our other platform posts. Every domain that served our widget between 24 July and 23 August 2026, 943 of them, got its home page fetched and fingerprinted from markup and headers. 494 answered. 213 turned out to be WordPress or WooCommerce, and 25 hostnames belonging to 20 accounts carry Divi, so Divi is roughly one in nine of the WordPress sites visible to us. We then parsed the DOM nesting on those 25 to see which Divi module wraps which fragment of the snippet.
| Where the fragment landed | Empty div | Our script file |
|---|---|---|
| Inside a Code Module | 15 | 5 |
| Inside a Text Module | 1 | 0 |
In <head> via Theme Options | not applicable | 6 |
| Elsewhere in the body, outside the builder | not applicable | 9 |
| Nowhere on the home page | 8 | 4 |
Twenty-one of the 25 run Divi as a theme, spanning versions 4.19.5 to 4.27.8, and two have already
moved to Divi 5 (5.8.1 and 5.9.0). The remaining three run the Divi Builder plugin on top of a
different theme, which behaves identically here. All 20 script tags we found carry defer, which is
what our builder emits and what you want anyway.
The snippet, and where each line goes
Paste the library once, globally, in Divi, Theme Options, Integration, in the body field:
<link rel="stylesheet" href="https://justreview.co/widget/justreview.css">
<script defer src="https://justreview.co/widget/justreview.js"></script>
Then, on the page that should show the reviews, drop a Code Module and paste the container plus the init call, with your own account hash from the widget builder:
<div id="justreview-testimonials"></div>
<script>
document.addEventListener('DOMContentLoaded', function () {
JustReview.initTestimonials('YOUR-ACCOUNT-HASH', {
config: { visibleSlides: 3, limit: 20, autoplay: true }
});
});
</script>
The container id is not decorative, it is the selector the library looks for: justreview-testimonials
for the slider, justreview-page for a full reviews page, justreview-ratings, justreview-summary,
justreview-counters and justreview-stars for the smaller pieces. A floating badge is the exception
and needs no container, which is why three of the sites in our sample legitimately have no container
div anywhere. The same three-line pattern works on any WordPress setup, with or without a builder,
and it is written out step by step in our
WordPress code embed instructions.
Three ways a Divi install goes quiet
Seven of the 24 sites we could parse in full show a mismatch between what the page starts and what the page contains. They fall into three groups, and every one of them is silent: nothing in the console, nothing in the Divi builder, nothing on screen.
The library runs, the container is missing. Five sites call an init for a widget whose container
is not on that page. One of them, a Divi Builder site, downloads the library on the home page, calls
initTestimonials, receives 12,795 bytes of reviews from our API and renders nothing, while its
floating badge, which needs no container, sits happily in the corner at 161 by 73 pixels. Sometimes
this is benign: one site injects a reviews-page init globally while the actual justreview-page
container lives on its /reviews/ URL, where we confirmed it is present three times over. Benign or
not, the cost is real on every page that has nothing to show.
The container is there, the library is not. One site keeps two containers inside Code Modules,
we measured them at 1200 by 0 pixels, and no copy of the library is requested anywhere on the page.
window.JustReview is undefined, both divs stay empty, and the console says nothing at all. This is
the exact inverse of the case above and it looks identical to the visitor: empty space where reviews
should be.
A consent tool blocks the loader. One site wrote a careful custom loader that creates the
stylesheet and the script with document.createElement rather than pasting tags. Its consent
auto-blocker let the stylesheet through, all 109,861 bytes of it, and never let the script run:
window.JustReview stayed undefined and the container measured 1440 by 0. Dynamically created
scripts are exactly what consent blockers are built to catch, so if your Divi site has one, keep the
library as a plain tag and allow-list our domain in the consent tool.
There is a fourth, milder pattern worth naming: one site loads our library twice, once from Theme Options and once again from a Code Module. It works, and it doubles the download for no benefit.
The two Divi-specific details worth stealing
The first comes from one of our users and it is genuinely clever. Divi’s Visual Builder loads your page inside an iframe, so every third-party widget on the page runs while you are trying to edit it. Their loader simply refuses to run there:
var isDiviEditor =
window.self !== window.top ||
/(?:\?|&)et_fb=1(?:&|$)/.test(window.location.search);
if (isDiviEditor) { return; }
The second is about caching. Two of the 25 sites no longer load our stylesheet from our domain at
all: an optimisation plugin copied it into a local minified cache file, one under /wp-content/cache/min/
and one under /core/cache/min/. That works until we ship a widget update, at which point the site
keeps serving whatever was frozen into that cache. If your Divi site runs a minify or combine plugin,
exclude justreview.js and justreview.css from it. The same goes for “delay JavaScript until
interaction” options, which push the widget below the fold in a way that looks like a bug.
What it costs on a Divi page
Measured on 23 August 2026, over the wire, compressed: the library is 128,226 bytes of JavaScript and 15,285 bytes of CSS, both static and cached, plus one JSON call to our API sized to your review count, plus the web font if you keep our default typography. There is no PHP, no database table and no extra admin screen inside WordPress. On a working Divi site we rendered end to end, running Divi 5.9.0, the widget produced 25 review slides in a container 1080 by 676 pixels with an empty console. For comparison, that same page shipped roughly 15 separate JavaScript files from the Divi theme itself before our widget was involved. If page weight is your worry on Divi, the reviews widget is not where the weight is.
Why we are worth the ten minutes
The reason to run reviews through us on Divi is that the snippet is the entire integration. One account holds Google alongside marketplaces and booking platforms, and every extra source you connect adds zero extra tags to the page, which matters on a builder where every tag you add is another thing an optimisation plugin can rewrite. The widget file is the same one we measured above, so the numbers on this page are the numbers you get, and nothing about it is Divi-specific, which means the same snippet survives a move to another theme or another platform later. Plans and limits are on the pricing page, and if you are still comparing tools, our rundown of review widgets in 2026 says where somebody else fits better.
The fair warning: we are a reviews aggregator, not a Divi module. There is no drag-and-drop entry in the Divi builder, the snippet is your responsibility once it is in a Code Module, and if your consent tool or your cache plugin decides to rewrite it, the fix is on your side of the fence. That trade is why this post is mostly a map of where things go wrong.
Ready to see it on your own layout? Create an account, connect Google, and copy the snippet from the widget builder into a Code Module. If you would rather see the finished thing first, our Google reviews widget page has it running live, and the WordPress guide covers the same install without a builder.
FAQ
Does Divi have a Google reviews module?
No. Divi ships a Testimonial module, but you type those testimonials yourself, so they are copy, not verified reviews. Real Google reviews arrive through a third-party script, and Divi's job is only to give that script a place to live. The Code Module is that place.
Code Module or Text Module for the reviews snippet?
Code Module. In our sample of 25 live Divi sites, 15 keep the container in a Code Module and exactly one keeps it in a Text Module. The Text Module one does render, so a bare container div survives it, but the Text Module also formats what you type and there is no reason to hand it a script tag when a Code Module exists two clicks away.
Why does my Divi page load the reviews script and show nothing?
Because the script and the container ended up on different pages. Divi lets you inject the library globally in Theme Options while the container lives in a Code Module on one page only. On one site we measured, the library ran on the home page, pulled 12,795 bytes of reviews from our API and had nowhere to put them, with no message in the browser console.
Will a caching or consent plugin break the widget on Divi?
It can, and we saw both. Two of the 25 sites had our stylesheet rewritten into a local minified cache file, which freezes the widget's styling at the version that was current when the cache was built. On another, a consent auto-blocker stopped a script tag that the page created with document.createElement, so the stylesheet loaded and the library never did.