Skip to main content
← Back to Blog|Review Widgets

How to Add Reviews to Drupal: Full HTML or Nothing

·8 min read·By Mike Ragimov

How to Add Reviews to Drupal (2026 Guide)

Complete guide to adding reviews to a Drupal site in 2026. The mechanic is a custom block containing the widget embed, placed either in a theme region through the block layout or into a section with Layout Builder, and it works across Drupal 7 through 11 with only the administrative path differing. The step that trips almost everyone is Drupal's text format system. Every piece of body content in Drupal passes through a filter chain defined by its text format, and the restrictive formats intended for untrusted user input, such as Filtered HTML in Drupal 7 or Basic HTML in Drupal 8 and later, remove tags that are not on their allow list. An embed pasted into a block on one of those formats saves without complaint and then renders as nothing, or as visible text, which is why the usual symptom is an editor that looks correct and a page that shows an empty space. The fix is to set the block's text format to a permissive one, normally Full HTML, which Drupal restricts to trusted roles by default because it does not filter markup. That restriction is deliberate: a format that allows arbitrary markup is a privilege, so it is granted per role rather than site-wide, and a site with an editorial team should keep it that way and let an administrator place the block once. Placement then follows the site's architecture: a region placement through block layout applies the block across the pages matched by its visibility conditions, while Layout Builder puts it into a specific section of a specific content type or node. Covers BlooTrue Drupal review widgets, free plan, unlimited widget views, and a one-line embed with no contributed module to maintain.

A developer at a terminal, where a Drupal text format quietly rewrites your markup

There is a specific way that adding an embed to Drupal fails, and it is the reason most people end up reading an article about it. You paste the code into a block, you save, Drupal reports success, and the page shows nothing. Nothing is broken and you did not lose the code. A text format filter removed it on the way out. Drupal runs body content through a filter chain on render, and the formats meant for untrusted input strip any tag not on their allow list, silently, at output rather than at save. Once you know that, adding reviews to Drupal is about ten minutes of work: a custom block on Full HTML, placed in a region or a Layout Builder section. Here is the whole path, including the part where Full HTML is a privilege rather than a checkbox.

Why Your Embed Code Disappeared

Because Drupal filtered it. Every piece of body content carries a text format, and that format is a chain of filters applied when the content is rendered. The formats designed for untrusted input remove tags that are not on their allow list, so an iframe or a script pasted into a block on Basic HTML is stripped on the way to the page.

The reason this is so confusing is the timing. The filtering happens on output, not on save, so Drupal reports a successful save, the editor often still shows your markup when you go back in, and only the rendered page is missing it. Every instinct says the save failed, and it did not.

The names differ by version. Drupal 7 ships Filtered HTML and Full HTML; Drupal 8 and later ship Restricted HTML, Basic HTML and Full HTML. The mechanism is the same in all of them, and so is the fix.

It is worth appreciating that this is Drupal working correctly. A CMS that let any editor paste arbitrary markup into a page would be a CMS with a stored cross-site-scripting problem, and the filter chain is what prevents that.

Which Text Format Do You Actually Need?

Full HTML, in practice. It applies no markup filtering, so the embed survives to the page intact. In the block edit form it is the Text format select underneath the body field, and switching it and re-saving is usually the entire fix.

Full HTML is restricted to trusted roles by default, and that restriction is doing real work. Permission to use it is effectively permission to put arbitrary markup on the site, so it is granted per role at Configuration, Content authoring, Text formats and editors rather than handed out broadly.

On a site with an editorial team, the right pattern is for an administrator to create and place the block once, and for editors to keep working in Basic HTML. The reviews block is a piece of site furniture rather than something writers should be editing, so nobody needs a permission upgrade.

If your organisation will not grant Full HTML at all, the alternative is a dedicated format with an allow list that covers exactly the tags the embed needs. That is more work to set up and more to maintain, but it keeps the blast radius small, and it is the correct answer on a site with a strict security posture.

Block, Layout Builder, or Node?

A custom block is the default answer, and on Drupal 8 and later it lives at Content, Blocks, or in the block library depending on your version. Create it, paste the embed into the body with Full HTML selected, and save. Then place it through the block layout into whichever region of your theme you want it in, with visibility conditions controlling which pages it appears on.

Layout Builder is the modern alternative and it is the better fit when the reviews belong inside a specific page rather than in a sitewide region. Enable it for the content type, edit the layout, add a section, and drop the custom block into it. You get placement inside the content flow rather than in a theme region, which is usually what you actually wanted.

Pasting the embed directly into a node body works and is the option to avoid on a site of any size. It ties the widget to one piece of content, it needs Full HTML on that node, and it puts a piece of site furniture into an editorial field where the next writer will delete it by accident.

None of these routes needs a contributed module, which is worth stating because the first search result usually recommends one. A contrib module is another dependency to audit, patch and carry through the next major version upgrade, in exchange for a text field you already have.

Does It Work the Same on Drupal 7 Through 11?

The mechanism does. Text formats, custom blocks and region placement exist across the whole range, so the shape of the work is identical: permissive format, custom block, region.

What differs is the administrative path and the naming. On Drupal 7 you are in Structure, Blocks, adding a block with an input format of Full HTML. On 8 and later you are in the block library and then Structure, Block layout, and the format names shifted with the addition of Restricted HTML and Basic HTML.

Layout Builder is the real dividing line: it arrived in Drupal 8 and is not available on 7. On a Drupal 7 site the region placement is the route, and that is fine, because a reviews block in a content region is a perfectly good outcome.

One version-independent point: because the embed is markup rather than a module, a major version upgrade does not break it. That is not true of a contributed reviews module, which is exactly the kind of dependency that holds sites back on old major versions.

How Do You Build the Widget?

Paste your Google, Trustpilot or Facebook profile URL, preview your real reviews and rating, then pick from over 100 layout styles across slider, marquee, grid, list, masonry and badge families. Colours and fonts adjust so it matches your theme rather than announcing itself as an embed.

The rating comes from the profile's own aggregate rather than from the cards on screen, so the figure on the page matches what a visitor finds if they check. Free plan, unlimited widget views.

The output is one line of HTML. It goes into the block body with Full HTML selected, and that is the last Drupal-specific step there is.

Where Should the Reviews Go?

Drupal sites tend to be organisational rather than transactional, so the useful placement is usually next to whatever action the site is asking for: the enquiry form, the application page, the service detail page. A reviews block in a sidebar region on every page is the default that nobody reads.

Use visibility conditions rather than placing the block everywhere. Restricting it by path or content type keeps it meaningful, and it stops the block competing with the primary content on pages where proof is not the question.

If you are on Layout Builder, prefer putting the block into the content flow of the pages that need it over a global region placement. Reviews immediately after the service description do more than reviews in a right rail the visitor has already tuned out.

One block. No contrib module.

A custom block on Full HTML, placed in a region or dropped into Layout Builder. No contributed module to audit, patch or carry through a major version upgrade.

Try the Free Widget Builder →

Try Our Free Tools

Drupal Reviews Widget — Add your Google, Trustpilot or Facebook reviews to any Drupal site with a custom block. Free plan, unlimited views.

AI Review Response Generator — Draft a reply to any review in seconds, then copy and paste it onto the platform. Free, no signup.

Frequently Asked Questions

Common questions about this topic

Why does my embed code disappear in Drupal?

A text format filter removed it. Drupal runs body content through a filter chain on render, and the formats intended for untrusted input, such as Basic HTML on Drupal 8 and later or Filtered HTML on Drupal 7, strip tags that are not on their allow list. Because this happens on output rather than on save, the save succeeds and only the rendered page is missing the markup.

Which text format do I need for a review widget?

Full HTML, which applies no markup filtering. It is the Text format select under the body field on the block edit form. Full HTML is restricted to trusted roles by default because using it is effectively permission to place arbitrary markup on the site, so grant it per role rather than broadly, or create a dedicated format allowing exactly the tags the embed needs.

Do I need a contributed module to show reviews in Drupal?

No. A custom block with the embed in its body does the job, so there is no extra dependency to audit, patch or carry through a major version upgrade. That last point matters on Drupal specifically, since contributed modules waiting on compatibility are a common reason sites stay on an old major version.

Should I use a block or Layout Builder?

Both work. A custom block placed through block layout is right for a sitewide region with visibility conditions. Layout Builder is better when the reviews belong inside the content flow of a particular content type, which is usually what people actually want. Layout Builder arrived in Drupal 8, so on Drupal 7 the region placement is the route.

Will this work on Drupal 7?

Yes. Text formats, custom blocks and region placement all exist on Drupal 7, so the shape of the work is the same: set the input format to Full HTML, create the block under Structure and Blocks, and place it in a region. Layout Builder is the one part that is not available there.

Will a Drupal upgrade break the reviews widget?

No, because the embed is markup in a block body rather than a module with a version constraint. The block travels through a major version upgrade the way any other content does. A contributed reviews module is the thing that would need a compatible release before you could upgrade.

Written by

Mike Ragimov
Mike Ragimov

Senior software engineer with over 8 years of experience. Founder and CEO of BlooTrue, a review widget platform for local businesses.