Custom Review & Rating Module for 1C-Bitrix

Custom Review & Rating Module for 1C-Bitrix We often encounter clients trying to collect reviews using standard components like `bitrix:catalog.element.vote` and `bitrix:forum`. The result is poor: an unmoderated forum, ratings without purchase verification, and no structured data for Schema.org.

Our competencies:

Frequently Asked Questions

Custom Review & Rating Module for 1C-Bitrix

We often encounter clients trying to collect reviews using standard components like bitrix:catalog.element.vote and bitrix:forum. The result is poor: an unmoderated forum, ratings without purchase verification, and no structured data for Schema.org. A proper review module is a different story: verified reviews, multi-criteria rating, moderation, seller responses, and aggregated star microdata. Our team, with over 10 years of experience in 1C-Bitrix development and 40+ successful projects, offers a custom module that covers all these gaps.

Why Standard Solutions Don't Cut It

Bitrix has a bitrix:catalog.element.vote component for voting and bitrix:forum linked to elements — these are the building blocks typically used for reviews. They lack built-in verification of paid orders, no moderation, no multi-criteria ratings. Microdata isn't generated, robbing you of the SEO benefit of star snippets. Our module addresses all these shortcomings.

How Purchase Verification Works

The most valuable part of a review is the "verified purchaser" badge. We check against b_sale_order:

public function isVerifiedPurchase(int $userId, int $productId): bool { $order = \Bitrix\Sale\Internals\BasketTable::getList([ 'select' => ['ORDER_ID'], 'filter' => [ '=PRODUCT_ID' => $productId, '=ORDER.USER_ID' => $userId, '=ORDER.PAYED' => 'Y', '=ORDER.CANCELED' => 'N', ], 'limit' => 1, ])->fetch(); return (bool)$order; } 

When creating a review, order_id can be explicitly passed — then verification is unambiguous. Without order_id, we check any paid order containing that product.

Moderation and Spam Protection

All reviews are created with status pending and enter a moderation queue. Two modes are possible:

  • Manual moderation — a moderator approves/rejects each review.
  • Auto-approval — reviews from verified purchasers are published automatically; others go to the queue.

Spam filtering uses simple heuristics: links in the body, excessive capital letters, duplicate text, stop words. Suspicious reviews get status spam.

class SpamDetector { public function check(string $text): SpamResult { if (preg_match('/https?:\/\//i', $text)) return SpamResult::spam('Links are forbidden'); if (similar_text($text, $this->getLastReview($text)) > 80) return SpamResult::spam('Duplicate'); foreach ($this->stopWords as $word) { if (mb_stripos($text, $word) !== false) return SpamResult::suspicious(); } return SpamResult::clean(); } } 

Multi-Criteria Rating

Products can have multiple rating criteria (e.g., "Quality", "Matches Description", "Delivery Speed"). The overall rating is the average of all criteria:

SELECT entity_id, AVG(rr.value) AS avg_rating, COUNT(DISTINCT r.id) AS review_count FROM b_vendor_review r JOIN b_vendor_review_rating rr ON rr.review_id = r.id WHERE r.entity_type = 'product' AND r.status = 'approved' GROUP BY entity_id; 

Aggregated data is cached with tag review_entity_{entity_id} and invalidated when a new review is approved.

Schema.org Microdata

For SEO impact, aggregated ratings must appear in microdata. As per Wikipedia: Schema.org, use AggregateRating for products:

<div itemscope itemtype="https://schema.org/Product"> <span itemprop="name">Product Name</span> <div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating"> <span itemprop="ratingValue">4.7</span> <span itemprop="reviewCount">143</span> </div> </div> 

The vendor:reviews.aggregate component generates this block from cached data. Sites with microdata see up to 5x more clicks on star snippets — proven in practice. You get stars in search results.

Usefulness Voting

Users can mark a review as "helpful" or "unhelpful". Protection against manipulation:

  • One vote per IP per day.
  • Authorized users: one vote per review forever.
  • Usefulness rating influences the display order of reviews.

Development Process

  1. Analysis and data model design (ORM tables).
  2. Module development: infoblocks, criteria, verification.
  3. Moderation, spam filter, voting.
  4. Integration with microdata and site components.
  5. Testing and deployment.

Comparison: Standard vs Our Module

Feature Standard Forum Our Module
Purchase verification No By paid order
Moderation No Manual / auto-approval
Multi-criteria rating No Yes (any criteria)
Schema.org microdata No AggregateRating, Product
Spam filter No Heuristics, stop words
Seller responses Via forum Built-in

Timeline

Stage Duration
ORM tables, review model 1 day
Purchase verification, sale integration 1 day
Moderation, spam filter 2 days
Multi-criteria rating, aggregation 1 day
Schema.org microdata 0.5 day
Usefulness voting 0.5 day
Seller responses, notifications 1 day
Site components 2 days
Admin interface + moderation queue 1 day
Testing 1 day

Total: 11 business days. Importing reviews from Yandex.Market or other platforms adds 1–2 days.

What's Included

  • Review module with ORM tables, components, and admin interface.
  • Purchase verification, moderation, spam filter setup.
  • Multi-criteria rating and Schema.org microdata.
  • Usefulness voting and seller responses.
  • Documentation and staff training.
  • Post-launch support.
Typical Mistakes When Developing a Review Module
  • Using the standard forum without modifications — no moderation, spam.
  • Ignoring microdata — lost SEO benefit.
  • No caching of aggregated rating — database load.
  • Incorrect verification check — allows fake reviews.

Contact us to discuss your project and get an accurate estimate. We have been working with Bitrix for over 10 years and guarantee a quality result.