Platforms

How to add Google reviews to Divi without an extra plugin

23 August 2026 · JustReview

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.

WhereReachExecutes onRight for
Code ModuleOne page, or one Theme Builder templateOnly where the module sitsThe empty div, plus the startup call beside it
Text ModuleOne pageOnly where the module sitsHeadings and copy around the widget, never the script
Theme Options, Integration, head or bodyWhole siteEvery page loadThe shared files: our stylesheet and our script tag
Theme Builder global header or footerEvery page using that templateEvery page with that templateSomething 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 landedEmpty divOur script file
Inside a Code Module155
Inside a Text Module10
In <head> via Theme Optionsnot applicable6
Elsewhere in the body, outside the buildernot applicable9
Nowhere on the home page84

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.

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.