Skip to main content

GHL Google Reviews Widget Setup and WordPress Embedding

Purpose

This SOP documents how to configure a Google Reviews widget inside a GHL sub-account and embed it on the client's WordPress site. The widget replaces hardcoded testimonials with live, filtered reviews pulled directly from the client's connected Google Business Profile. Filtering by minimum star rating ensures only qualifying reviews render on the site.

Scope

Covers:

  • Creating and configuring a Reviews widget in the GHL Reputation module
  • Applying a minimum star-rating filter (commonly 3-star or 4-star and above)
  • Styling the widget to match client brand (colors, layout)
  • Copying the widget embed snippet
  • Embedding the widget on a WordPress site using Elementor, Gutenberg, or the LeadConnector shortcode
  • Testing the embedded widget on mobile and desktop
  • Ongoing management (filter changes, styling updates, sync monitoring)

Does Not Cover:

Prerequisites

  • GHL sub-account access (admin level)
  • Google Business Profile already connected to the sub-account and syncing reviews into the Reputation module (follow Manual Google Review Request Configuration SOP, Step 1, if not yet connected)
  • At least one review visible under Reputation > Reviews (the widget renders nothing until reviews exist)
  • WordPress site running the Symphony Core stack (Astra + Elementor + LeadConnector) per WordPress Setup Procedures, with edit access to the page where the widget will appear
  • Client brand colors and (optionally) fonts for widget styling

Step-by-Step Procedure

Step 1: Open the Reviews Widget Builder

  1. Log into the GHL sub-account
  2. Click Reputation in the left navigation
  3. Click Widgets in the Reputation sidebar
  4. Click + New Widget (or Create Widget)

Step 2: Select Widget Type and Layout

  1. Select Reviews Widget (as opposed to a review-request widget)
  2. Choose a layout:
    • Carousel -- recommended for homepage hero and above-the-fold sections; rotates through reviews automatically
    • Grid -- recommended for a dedicated "Testimonials" page; shows multiple reviews at once
    • List -- single-column stack; best for narrow sidebars or long-scroll pages
  3. Set the number of reviews to display (carousel defaults: 5–10; grid defaults: 6–9)

Step 3: Configure Review Filter

  1. Locate the Minimum Rating (or Rating Filter) control
  2. Set the threshold:
    • 3 stars and above -- broadest inclusion while hiding clearly negative reviews
    • 4 stars and above -- stricter filter; recommended when the client has a large review volume and wants a curated feel
  3. (Optional) Set a minimum review length to suppress one-word reviews
  4. (Optional) Toggle whether to require a written comment (excludes star-only reviews)

Document the chosen threshold in the client's profile or operational notes so future edits preserve intent.

Step 4: Choose Display Fields

Select which review attributes render in each card:

  • Reviewer name (default: on)
  • Star rating (default: on)
  • Review text (default: on; set a character truncation with "read more" expansion if reviews are long)
  • Relative date (e.g., "3 weeks ago") or absolute date
  • Reviewer avatar / Google profile photo (default: on)
  • Google logo / "Verified Google review" badge (recommended on -- reinforces authenticity)

Step 5: Apply Brand Styling

  1. Open the widget's Style or Appearance panel
  2. Configure:
    • Card background -- usually white or a light neutral matching the site palette
    • Primary accent color -- used for the star fill; should match the client's primary brand color
    • Text color -- ensure contrast passes WCAG AA against the card background
    • Border radius, shadow, padding -- match existing site card components
    • Font family -- if the widget exposes font overrides, match the site's heading and body fonts
  3. Preview the widget on both mobile and desktop previews inside GHL
  4. Adjust until the widget visually blends with the target site section

Step 6: Save and Copy Embed Snippet

  1. Click Save (or Publish)
  2. Open the widget's detail view and locate the Embed Code section
  3. Copy the snippet. It will be one of:
    • An <iframe> element with a src URL, or
    • A <script> tag plus a <div> target
  4. Paste the snippet into a secure scratch location (ClickUp task, password manager note, or the client's operational doc) so it can be re-applied later without re-generating

Step 7: Embed in WordPress

Choose one method based on where the widget will appear.

Method A: Elementor HTML Widget (most common)

  1. Open the WordPress page in Elementor
  2. Drag the HTML widget into the target section
  3. Paste the embed snippet into the Code area
  4. Set the widget's container to full width if the site uses boxed layouts
  5. Set a sensible minimum height (carousel: 350–500px desktop, 450–600px mobile) to prevent layout shift during load
  6. Click Update / Publish

Method B: Gutenberg Custom HTML Block

  1. Open the WordPress page in the block editor
  2. Insert a Custom HTML block
  3. Paste the embed snippet
  4. Click Preview to confirm it renders, then Update

Method C: LeadConnector Shortcode (if supported by current plugin version)

  1. Confirm LeadConnector is connected per WordPress Setup Procedures, Section 5.4
  2. In LeadConnector > Widgets (or equivalent), locate the reviews widget by its GHL widget ID
  3. Copy the generated shortcode (format varies, e.g., [ghl_reviews id="ABC123"])
  4. Paste the shortcode into any WordPress page, post, or text widget

If the shortcode method is unavailable in the plugin version installed, fall back to Method A.

Step 8: Verify the Live Embed

  1. Open the published WordPress page in an incognito browser window
  2. Check:
    • Widget renders within 2–3 seconds
    • Only reviews at or above the configured star threshold appear
    • Reviewer names, text, and dates display correctly
    • Stars render in the brand accent color
    • No horizontal scroll on mobile (test at 320px, 768px, and 1024px breakpoints)
  3. Click into one review card (if the widget supports drill-down) and confirm it links to the actual Google review
  4. Inspect the browser console for errors or CSP violations (see Troubleshooting)

Step 9: Confirm Sync Behavior

  1. Note the most recent review currently shown on the live widget
  2. When a new qualifying review arrives on the client's Google Business Profile, confirm it appears on the embedded widget within GHL's sync window (typically minutes to a few hours)
  3. If a new review does not appear after 24 hours, see Troubleshooting

Required Inputs

  • GHL sub-account credentials
  • Connected Google Business Profile with at least one synced review
  • WordPress admin / Elementor edit access
  • Client brand colors and fonts
  • Decision on minimum star-rating filter (3★+ or 4★+)
  • Target page URL and section placement

Expected Outputs

  • Configured Reviews widget visible in Reputation > Widgets
  • Documented widget ID and embed snippet stored in client operational notes
  • Embed snippet installed on the target WordPress page(s)
  • Live widget rendering filtered reviews and matching brand styling
  • Sync confirmed between GHL Reputation module and the live widget

Troubleshooting

Common Issues

Issue: Widget shows "No reviews to display" Solution:

  1. Verify reviews exist under Reputation > Reviews in the sub-account
  2. Confirm reviews meet the minimum rating filter (a 3★+ filter with only 2★ reviews will appear empty)
  3. Check that the Google Business Profile is still connected -- OAuth disconnects silently
  4. Lower the filter temporarily (e.g., 1★+) to confirm the widget itself is working, then restore the intended threshold

Issue: Widget does not render at all on the WordPress page Solution:

  1. View page source and confirm the iframe/script tag is present in the HTML (Elementor sometimes strips tags if pasted into a rich-text block instead of the HTML widget)
  2. Open browser developer tools and check the Console and Network tabs for errors
  3. If errors mention X-Frame-Options or Content-Security-Policy, see the CSP issue below
  4. Confirm a security plugin (Wordfence, iThemes, Solid Security) is not blocking the GHL domain -- allowlist msgsndr.com and the widget domain if necessary

Issue: CSP / iframe blocked (console shows "Refused to frame..." or "X-Frame-Options: deny") Solution:

  1. Check WordPress security plugin settings for Content Security Policy rules
  2. Add the widget domain to the plugin's iframe/frame-ancestors allowlist
  3. If using a CDN (Cloudflare, Bunny), check for transform rules or page rules that strip iframes
  4. If the widget is on an HTTPS site, confirm the embed URL is also HTTPS (never mix)

Issue: Widget styling looks off on the live site (colors, fonts wrong) Solution:

  1. Confirm the styling was saved in GHL (not just previewed) -- click Save after each edit
  2. Hard-refresh the WordPress page (Ctrl+Shift+R) to bypass any cached version
  3. Clear any caching plugin layer (WP Rocket, W3 Total Cache, LiteSpeed)
  4. If the site enforces its own typography via !important, the iframe widget may be unaffected -- edit fonts inside GHL widget settings instead

Issue: New reviews not appearing on the live widget Solution:

  1. Confirm the new review is visible under Reputation > Reviews in GHL (if not, the issue is upstream -- see Manual Google Review Request SOP troubleshooting)
  2. Wait up to 24 hours -- GHL's sync from Google Business Profile is not real-time
  3. Disconnect and reconnect the Google Business Profile if the review has been on Google for >48 hours without syncing
  4. Verify the new review meets the widget's minimum rating filter

Issue: Mobile layout broken (cards overflow, buttons clipped) Solution:

  1. Reduce the number of visible reviews on mobile in the widget's responsive settings
  2. Increase the Elementor HTML widget's minimum height at the mobile breakpoint
  3. Switch from grid to carousel layout -- grids often need more horizontal space than mobile allows

Exceptions and Edge Cases

  • Case A: Client has fewer than 3 qualifying reviews -- the widget may look sparse. Either lower the filter temporarily, hide the widget until more reviews arrive, or run a review-request campaign (see Manual Google Review Request SOP)
  • Case B: Multi-location client -- each Google Business Profile connection generates its own reviews pool. Confirm the widget is pulling from the correct location, and consider one widget per location page
  • Case C: Non-English reviews -- the widget renders reviews as written. If the client's site is English-only, consider excluding languages via minimum-length filter or displaying a mix with a note
  • Case D: Reviews mentioning competitor names or inappropriate language -- filter threshold alone will not catch these. Respond via the AI Review Response SOP and flag for Google removal; the widget cannot exclude individual reviews
  • Case E: GHL widget product changes -- GHL periodically updates the Reputation widget builder UI. Step labels in this SOP may drift. The flow (type → filter → style → embed) remains stable; verify against current UI and log discrepancies against this SOP

Revision History

DateVersionChange DescriptionAuthor
2026-04-171.0Initial version, triggered by Moots Law testimonial widget implementationSymphony Core Systems Team