A customer leaves a review on a product. A few weeks later they’re on the same product page, forget they reviewed it before, and start typing another one. Or their first review is still pending in your moderation queue and they assume it didn’t go through, so they fill in the form again.
In a system that doesn’t check, both reviews land. Now your queue has two reviews from the same person on the same product, and your aggregate count is overstating how many distinct customers have actually reviewed it. The data drifts a little every time it happens.
Trustie checks. When the second submission hits Submit, the check runs server-side and the form returns a polite block message before anything is saved.
What the customer sees
A clear, friendly form-level error: "You have already reviewed this item." Renders inline at the top of the form, the same way other validation errors do. The customer reads it, closes the form, and goes back to find their original review. No popup, no redirect, no friction.
How the check works
For each submission, Trustie looks for an existing review from the same customer on the same product. The match is on:
- Logged-in customers: the user ID and the product ID.
- Guests: the email address and the product ID.
If a match is found, the submission is rejected before anything is saved. The error returns straight away, fast enough that it feels like a normal form validation rather than a server round-trip.
Catches in-flight reviews too
A customer whose first review is still pending in your moderation queue is just as covered as one whose review is already published. The check looks at reviews in any state (approved, pending, spam, even trashed), so a customer doesn’t get to silently submit a second one because the first one isn’t visible yet.
For site reviews (the ones about your shop overall, rather than about a specific product), the same logic applies: one site review per customer, no duplicates regardless of what happened to the first one.
Logged for visibility
Every blocked submission writes to the Trustie debug log as a warning, with the customer identifier and the product. If you want to see how often the block is firing, the log shows you the pattern.
Why one-review-per-customer beats edit-existing
Some review systems let customers edit their existing review when they hit a duplicate. It sounds nice but creates problems: pending reviews you haven’t seen yet get edited before moderation; customers who realise they can edit can also realise they can replace a positive review with a negative one (or vice versa) months later; the moderation tail gets longer for everyone.
The cleaner shape: one customer, one review per product, set in place when it lands. If a customer wants to change their review, they ask you, and you handle it manually with full visibility. Your aggregate stays accurate; your moderation stays clean; the customer’s voice gets heard once per product, properly.
If you’re weighing this up against Yotpo, Stamped, or Judge.me
Yotpo, Stamped, and Judge.me all enforce one-review-per-customer-per-product as part of their broader platforms. The differences come down to UX details: some redirect to the existing review, some show an edit-your-review path, some just show an inline message.
Trustie’s block is the inline-message version: clean error at the top of the form, no redirect, no edit path, no follow-up steps the customer has to navigate. Simpler shape, easier to understand, fewer moving parts. And it’s part of Trustie Pro rather than a feature you’re paying a separate platform tier for.
Why this just being on by default matters
Most shops don’t think about duplicate review prevention until they see two reviews from the same person and wonder how that happened. Trustie’s block runs out of the box; you don’t configure it, and you don’t notice it’s working unless you go looking at the log.
It’s the kind of feature that’s most valuable when you forget it exists. Which, after the first time it saves your aggregate count from drifting, you mostly do.