Installation guide
How to embed Google reviews in plain HTML (no plugin)
Put one script tag where you want real customer reviews. The same approach works in a hand-written page or an HTML block that allows JavaScript.
Updated October 2026
Quick answer
- In VerifiedWidget open your widget, click Embed, and copy the script tag.
- Paste it into your page body, exactly where the reviews should appear.
- Publish and open the live page. A file opened from your computer (a
file:address) fails if you set allowed domains.
Want the reviews somewhere other than where the script sits? Add a <div data-verifiedwidget-id="YOUR_WIDGET_ID"></div> placeholder at that spot and use the script without data-widget-id.
Get the code for your own widget
Start in VerifiedWidget. Connect the business with its Google Maps link. Check that the business name and imported reviews are the ones you expect. Then make a widget, pick a layout, save it, and open its Embed dialog. With HTML / website builder chosen as the platform, it gives you a single script tag. Copy it exactly. You do not need a WordPress plugin, a Google API key in the page, or a hand-built list of review cards.
This is the actual shape of the dashboard code, with an example widget ID. The ID below is only a placeholder and will not show your reviews. Replace the whole line with the code from your dashboard, including data-widget-id, crossorigin, and async. Do not paste a private key into public HTML.
<script src="https://verifiedwidget.com/widget.js" data-widget-id="c123456789012345678901234" crossorigin="anonymous" async></script>The browser downloads widget.js from VerifiedWidget. Once it runs, the loader creates the review display beside that script tag and requests your saved widget data. That placement detail matters: put the tag in the part of the page body where visitors should see the reviews. If you put it in the document head without a matching placeholder, the loader adds the display at the end of the body instead.
Paste it into a plain HTML page
Open the file that produces the published page. Find the section where your heading and reviews should sit, then paste the copied line immediately below the heading or introductory paragraph. Here is a complete example. The sample ID is deliberately fake; use your own dashboard snippet before publishing.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Customer reviews</title>
<style>
.reviews-slot { min-height: 320px; }
</style>
</head>
<body>
<main>
<h1>What our customers say</h1>
<div class="reviews-slot">
<script src="https://verifiedwidget.com/widget.js" data-widget-id="c123456789012345678901234" crossorigin="anonymous" async></script>
</div>
</main>
</body>
</html>Save, deploy, and open the public URL in a fresh tab. Check the page itself rather than only a visual editor or a local file opened with a file: address. The review request needs an ordinary website address (such as https://yoursite.com), especially if you have restricted the widget to certain domains. If your site builder offers an HTML or Embed block that runs scripts, place the same single tag there and publish the page. If the block only prints code as text, use a block that permits scripts or ask the site owner to add it to the page template.
Use one tag for each intended widget placement. The script is tied to one saved widget ID. If you duplicate the section across a site template, every page using that template may show the widget and use monthly views. Remove an old embed if you replace it with a new widget; otherwise you may render the same reviews twice.
Why the script uses async
The async attribute lets the page continue loading while the browser fetches the review script. It does not wait for an exact position in the page-loading sequence. Keep the script next to the intended display spot so it can insert the widget there when it executes. Avoid wrapping this tag inside a code sample, a quoted HTML string, or a comment: those show text to visitors but do not run the widget.
Reviews arrive after the script requests data. A fast page may briefly show an empty reserved area. This is normal; do not add made-up review text as a loading placeholder. If reviews are important near the top of the page, keep the page light and avoid site plugins that delay external scripts until a visitor scrolls. If you intentionally defer scripts for consent, verify that your consent tool eventually loads the tag and that the review area becomes visible.
Allow the required requests through a security policy
Some sites send a Content Security Policy, or CSP, header that limits which services the browser can contact. A policy that only allows your own domain can stop the script or the review-data request. Your site administrator can add https://verifiedwidget.com to script-src for the file and to connect-src for its data request. The line below is an illustrative set of directives, not a replacement for your complete site policy.
Content-Security-Policy: script-src 'self' https://verifiedwidget.com; connect-src 'self' https://verifiedwidget.com; img-src 'self' data: https://verifiedwidget.com https://*.googleusercontent.com;Images may come from the review source or your selected theme, so check blocked image addresses in the browser before adding a narrow image host. The widget also adds its own styles. If your policy sets style-src (or default-src), it needs 'unsafe-inline' for those styles. If you pick a Google font in the widget, also allow https://fonts.googleapis.com in style-src and https://fonts.gstatic.com in font-src. Keep your existing policy rules for the rest of the site. If your site uses a nonce-based strict policy, have its maintainer apply that policy's trusted-script setup instead of blindly pasting this example. The browser console will name the exact directive that blocked a request.
Leave room for the reviews
Because the reviews load after the first HTML, the area can grow and push content below it. That visible jump is called layout shift. Give an ordinary grid or carousel a reasonable minimum height, as in the example, then adjust it after checking the live widget on desktop and mobile. A longer list may need more height; a floating badge needs none, because it sits in a screen corner. Do not force a fixed height with hidden overflow unless you want to clip reviews. The right value depends on the selected layout, number of cards, and screen width.
Check the finished page with a narrow browser window. If cards overflow, give the section a full-width parent and remove restrictive widths or clipping on its ancestors. If there is too much blank space before the widget appears, reduce the reserved height or choose a smaller layout. The widget itself uses a shadow root for its styles, but the space around it still comes from your page's layout.
If the widget is blank
First confirm that the exact script survived publishing and that you are checking the correct public page. Then check the saved widget in VerifiedWidget for imported reviews, filters that hide every review, and any monthly view limit. If you enabled allowed domains, include the actual production host and any staging host you use for testing. A restricted host can produce a 403 response. A deleted or mistyped widget ID can produce a 404.
Open the browser console and network panel. A blocked widget.js points to script loading or CSP; a blocked /api/embed/ request points to connect-src, network access, or the domain list. Try once without a script-blocking browser extension. If the widget loads but is hidden, inspect the surrounding section for display:none, zero width, or clipped overflow. When asking for help, share the page URL and widget ID, never private credentials.
Showing reviews on your own site does not make that business eligible for Google review stars in search results. Our review stars guide explains the rule. For a site built with components rather than plain HTML, use the React guide or Next.js guide.
Frequently asked questions
Do I need a plugin or a Google API key?
No. Paste the script copied from your VerifiedWidget dashboard into HTML that permits JavaScript. Keep any private API keys out of the page.
Where exactly should I paste the script?
Place it in the page body at the spot where reviews should appear, such as below a reviews heading. A head placement without a matching placeholder puts the display at the end of the body.
Why is the script marked async?
It lets the rest of the page load while the widget file downloads. The reviews appear once the script and review data have arrived.
Why is there a blank gap before reviews appear?
The page may reserve height to prevent content from jumping while reviews load. Adjust that minimum height for your selected layout and mobile screens.
Can I use the same code on several pages?
Yes. Each page will show the saved widget where you place its script, and each load can count toward your monthly view allowance.
Add reviews with one HTML snippet
Create a free widget, copy the real script from your dashboard, and test it on your published page.