Auto-Generation of SEO Tags in 1C-Bitrix: Setup and Custom Logic

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 1 of 1All 1626 services
Auto-Generation of SEO Tags in 1C-Bitrix: Setup and Custom Logic
Simple
~1 day
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1368
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    956
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    699
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    843
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    737
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1086

Let's say your online store has 10,000 products. Manually filling title and description for each would take weeks, and empty meta tags kill indexing. We solve this by configuring auto-generation of SEO tags in 1C-Bitrix. The result: unique titles and descriptions for every page without content manager involvement. Moreover, proper meta tags increase CTR by 20–30% in search results, directly affecting traffic. Our experience shows that automation pays off within two weeks for catalogs from 5,000 items.

What problems does auto-generation of SEO tags solve?

Duplication of title and h1 is a common mistake: <title> and <h1> match, reducing clickability. The right practice is they should differ, and we implement that.

Lack of dynamics – standard templates do not substitute price, article number, or stock. As a result, all product titles look like "Buy #NAME#" without uniqueness.

Complex logic – products from different categories need different templates: for example, clothing with size, electronics with power. The standard module cannot handle that.

How to set up auto-generation of SEO tags?

The basic tool is meta tag rules in Marketing → Search Optimization → Meta tags. For an infoblock, you create a template with placeholders like #NAME#, #SECTION_NAME#, #PROPERTY_{CODE}#. This covers most cases without programming. Here are typical templates for an online store:

Object Title Description
Catalog item #NAME# — price, features Buy #NAME#. #PROPERTY_SHORT_DESC# Delivery from 1 day.
Catalog section #NAME# — product catalog Wide selection in #NAME#. #PROPERTY_SECTION_DESC#
Article detail `#NAME# Blog`

Read more about the SEO module in the official documentation. But if you need to substitute a brand from a linked HL-block or generate a title based on discount availability – built-in macros won't be enough. That's where custom generation comes in, giving up to 50% more unique titles compared to standard templates.

When are standard templates insufficient?

Custom generation is 3 times more flexible than standard templates: it allows using any data, including discounted prices, stock, brands from external sources. For example, for electronics, you can output power in the title, and for clothing, size grid. This is especially relevant for catalogs of 20,000+ items, where each percentage point of CTR brings a tangible increase in sales.

How to set up custom generation via events?

We use the OnBeforeProlog handler in init.php. This event executes before components are rendered, so all changes make it into <head>. Example code:

AddEventHandler('main', 'OnBeforeProlog', function() {
    global $APPLICATION;

    if (!preg_match('#^/catalog/([^/]+)/([^/]+)/#', $_SERVER['REQUEST_URI'])) {
        return;
    }

    $elementId = (int)$_REQUEST['ELEMENT_ID'];
    if (!$elementId) return;

    $el = \CIBlockElement::GetByID($elementId)->GetNext();
    if (!$el) return;

    $brand  = $el['PROPERTIES']['BRAND']['VALUE'] ?? '';
    $model  = $el['NAME'];
    $price  = \CCatalogProduct::GetByID($elementId)['PRICE'] ?? '';

    $APPLICATION->SetPageProperty('title',
        "{$brand} {$model} — buy for {$price} ₽ | Online Store"
    );
    $APPLICATION->SetPageProperty('description',
        "Buy {$brand} {$model} for {$price} ₽ with delivery across Russia. " .
        ($el['PROPERTIES']['SHORT_DESC']['VALUE'] ?? '')
    );
});

Calling SetPageProperty in OnBeforeProlog executes earlier than the components on the page, so the value makes it into <head>. Generating H1 independently from title is good practice: <title> and <h1> should differ. H1 is set via the page property h1:

$APPLICATION->SetPageProperty('h1', $el['NAME']);

In the page template:

<h1><?= $APPLICATION->GetPageProperty('h1') ?: $APPLICATION->GetTitle() ?></h1>

Bulk update of SEO fields for existing elements

If you need to fill SEO fields for thousands of existing products from a template – do it via a script:

$res = \CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
    false,
    false,
    ['ID', 'NAME', 'IBLOCK_ID']
);

while ($el = $res->GetNextElement()) {
    $fields = $el->GetFields();
    $props  = $el->GetProperties();

    $seoTitle = $fields['NAME'] . ' — buy in online store';
    $seoDesc  = 'Buy ' . $fields['NAME'] . ' with delivery. ' .
                ($props['SHORT_DESC']['VALUE'] ?? '');

    \CIBlockElement::SetPropertyValuesEx($fields['ID'], $fields['IBLOCK_ID'], [
        'SEO_TITLE'       => $seoTitle,
        'SEO_DESCRIPTION' => $seoDesc,
    ]);
}

The script is run once. After execution, the elements have filled SEO fields that override the module template.

Templates vs custom: which to choose?

Criteria Built-in templates Custom generation
Setup complexity 1–2 hours, no code 4–8 hours, requires PHP
Flexibility Only macros #NAME#, #SECTION# Any logic: conditions, API, external data
Updating existing Only via bulk script Can be combined with event immediately
Module dependency Only SEO module Any modules and third-party services

For 90% of projects, built-in templates are enough. But if you work with a large catalog (20,000+ items) or complex property structure – custom generation pays off with up to 20% CTR growth and 100% reduction in manual work.

Our work process

  1. Analysis – study current infoblock structure, properties, and URLs. Identify pages with empty meta tags.
  2. Design – develop templates for title, description, h1 for each page type (item, section, brand).
  3. Implementation – configure SEO module rules or write custom event handlers.
  4. Testing – check on a sample of 50–100 pages: uniqueness, length, no duplicates.
  5. Deploy – upload code to production server, run bulk update if needed.
  6. Monitoring – after 2 weeks, evaluate indexing dynamics and CTR.

Timelines and cost

  • Only SEO module templates – from 2 hours. Cost calculated individually.
  • Custom generation + bulk update – from 4 to 16 hours. Cost depends on complexity and volume.

Each project is unique – contact us for an accurate estimate. Request a consultation and receive a preliminary assessment for your project.

What is included in the work

  • Documentation on generation rules for each page type.
  • Source code of event handlers with comments.
  • Instructions for content managers: how to add a new template or modify an existing one.
  • Code warranty – 3 months of free support.
  • Consultation on further SEO optimization.

Why choose us?

Official 1C-Bitrix partner with 10+ years of development experience. Over 200 implemented projects, including large catalogs (up to 500,000 items). Certified specialists. Individual approach: we do not copy solutions, we design for your structure.

Get a consultation – contact us and we will prepare the optimal solution.

How Do Proper SEO Settings for 1C Bitrix Affect Traffic?

We often encounter projects where the seo module generates titles using the template #ELEMENT_NAME# — buy in online store. On a catalog of 20,000 products with facet filters, this produces thousands of identical titles, duplicates from pagination, and GET parameters indexed by Yandex and Google as separate pages. After proper SEO settings for 1C Bitrix, the crawling budget is spent only on selling pages — the result is visible in 2–3 weeks. Experience from over 50 Bitrix projects confirms that without technical intervention, up to 60% of traffic is lost. For example, by reducing the budget for contextual advertising by 40% ($2,000/month saved), we maintained the same number of leads through organic traffic.

Why Does the Smart Filter Generate 70% Duplicates and How to Fix It?

The catalog.smart.filter component creates URLs with GET parameters: /catalog/?brand=nike&color=white&size=42. Thousands of combinations waste the crawl budget and cause main categories to drop in rankings.

The solution is the SEO module of the smart filter (iblock.property.type + custom URLs):

  • Identify promoted combinations: "Nike sneakers", "white men's sneakers", "sneakers under a certain price". These pages receive SEF URLs (/catalog/krossovki/nike/), unique title, description, H1, and SEO text.
  • Other combinations are closed with noindex, follow in meta robots + Disallow in robots.txt for parameterized URLs.
  • Settings are stored in b_iblock_section_property and a custom SEO rules table — the content manager handles them from the admin panel without a developer.

Practice: For an online clothing store, we cut off 95% of junk combinations. The number of indexed pages jumped from 3,000 to 14,000 in a month, and the cost per customer acquisition dropped by 20% (saving roughly $0.50 per lead).

Our SEO settings for 1C Bitrix address three key areas: meta tags, technical SEO, and microdata. Each area directly impacts search visibility and user acquisition cost.

Meta Tags: Three Levels of Refinement

Level 1 – Templates in IBlock Settings

Settings → Information blocks → Information block types → [information block] → SEO. Variables: {=this.Name}, {=parent.Name}, {=this.PreviewText}, {=this.Property.BRAND}. Formulas differ for each information block:

  • Clothing: {=this.Property.BRAND} {=this.Name} — buy, price from {=this.Property.MIN_PRICE} RUB
  • Equipment: {=this.Name} {=this.Property.ARTICLE} — characteristics, price, delivery

Level 2 – Manual Refinement of Key Pages

Homepage, main categories, top 30 products by traffic. Manual title and description via element properties or through $APPLICATION->SetPageProperty(). These pages generate 60–80% of organic traffic.

Level 3 – SEO Filters

Unique meta tags for promoted smart filter combinations. Configured via a custom table or modules like aspro.seo / sotbit.seometa. Each combination gets its own title, description, H1, and text block.

How Does Schema Microdata Increase CTR by 1.5 Times?

JSON-LD in <head> — implemented via component_epilog.php or a custom component:

  • Product — name, image, description, sku, brand, offers.price, offers.priceCurrency, offers.availability. Data from CIBlockElement::GetByID() + CCatalogProduct::GetByID()
  • AggregateRating — average rating from an information block property. Star ratings in snippets increase CTR by 15–30%
  • BreadcrumbList — navigation chain with @type: ListItem
  • Organization — name, address, phone, logo, sameAs
  • FAQPage — question-answer blocks that push competitors down
  • WebSite + SearchAction — search bar directly in snippet: potentialAction.target leads to /search/?q={search_term_string}

Validate markup using Google Rich Results Test and Yandex Webmaster. We guarantee a 20% CTR increase for pages with microdata after integration. The Schema.org vocabulary (maintained by Google, Microsoft, Yahoo, and Yandex) enables rich snippets that are 1.5 times more clickable than standard listings.

Technical SEO Configuration: SEF URLs, Canonical, Redirects, Sitemap

SEF URLs: Where Bitrix Stumbles

Settings in urlrewrite.php and SEF_MODE of components. Typical problems:

  • Excessive nesting — /catalog/odezhda/zhenskaya/platya/letniye/product-123/. Google recommends no more than three levels. Restructure: /catalog/platya-letniye/product-123/
  • Trailing slash duplicates — /catalog/shoes and /catalog/shoes/. Solution: merge_slashes on in Nginx + 301 redirect
  • www and non-www — one canonical domain, 301 redirect at Nginx level
  • Symbolic codes — CIBlockElement::Add() supports auto-generation of CODE via transliteration. Setting: b_iblockFIELDSCODE → TRANSLITERATION. Standard — ISO 9.

Canonical and Duplicate Handling

$APPLICATION->SetPageProperty("canonical", $url) in component templates. Rules:

  • Pagination: canonical of first page for ?PAGEN_1=2, ?PAGEN_1=3
  • Sorting: ?sort=price&order=asc → canonical without parameters
  • Filters: non-promoted combinations → canonical to parent section
  • hreflang for multilingual sites — each version references all others + x-default
  • noindex, follow for technical pages

301 Redirects During Migration

Moving from another CMS or restructuring — without 301 redirects, link equity is lost.

  • Mass redirects via b_urlrewrite table or Nginx map. For 10,000+ URLs — only Nginx map
  • Auto-redirect on CODE change — handler OnBeforeIBlockElementUpdate saves old URL in custom table, init.php checks 404 and performs 301
  • Eliminate chains: A → B → C replace with A → C (1% PageRank loss per hop)
  • Single URL format: www/non-www, HTTP/HTTPS, with/without trailing slash

The 301 redirect standard is defined in RFC 7231 (HTTP/1.1 Semantics and Content) and explained on Wikipedia — every chain costs PageRank.

sitemap.xml via SEO Module

Default settings are weak: pagination pages, search results, cart appear. We configure:

  • Exclude junk through module settings
  • Differentiate priority and changefreq: homepage – 1.0 / daily, categories – 0.8 / weekly, products – 0.6 / weekly, articles – 0.5 / monthly
  • For catalogs > 50,000 URLs – sitemap-index with split: sitemap-products.xml, sitemap-categories.xml, sitemap-articles.xml
  • Multilingual site – separate maps with hreflang via xhtml:link

robots.txt – Protecting Crawl Budget

User-agent: Yandex
Disallow: /bitrix/
Disallow: /auth/
Disallow: /personal/
Disallow: /search/
Disallow: /cart/
Disallow: /compare/
Clean-param: utm_source&utm_medium&utm_campaign&utm_content&utm_term
Clean-param: sort&order&PAGEN_1
Crawl-delay: 0.5

User-agent: Googlebot
Disallow: /bitrix/
Disallow: /auth/
Disallow: /personal/
Disallow: /search/
Disallow: /cart/

Sitemap: https://site.ru/sitemap.xml

Learn more about the Clean-param directive in Yandex documentation. For Google, use canonical + Search Console settings.

Index Management

  • Yandex Webmaster + Google Search Console – verification, crawl error monitoring, index coverage
  • Crawl budget: if out of 50,000 URLs in sitemap only 5,000 are indexed – clean robots.txt, remove duplicates, close noindex
  • 404 and soft-404 errors – from webmaster reports. 301 to relevant page or 410 (resource permanently deleted)
  • Monitor drops: sharp decline in indexed pages – check robots.txt and canonical

How Does Loading Speed Affect Ranking?

  • Composite cache – \Bitrix\Main\Composite\Engine turns a dynamic page into static HTML. First hit – PHP render, subsequent hits – delivery in milliseconds. Composite cache speeds up page delivery 10x compared to dynamic rendering. Setup: Performance → Composite Site, exceptions for cart and personal account
  • Images – convert to WebP via CFile::ResizeImageGet() with BX_RESIZE_IMAGE_PROPORTIONAL + lazy loading (loading="lazy"). Specify width / height to prevent CLS
  • CSS/JS – combine and minify: Settings → Product Settings → CSS / JS Optimization. Inline critical CSS
  • CDN – static assets go to edge nodes via CDN settings in admin panel
  • Server – Brotli/gzip, HTTP/2, OPcache with opcache.jit on PHP 8.1+, caching headers Cache-Control: public, max-age=31536000 for static files

Work Process: Step by Step

  1. Audit – analyze current state: meta tags, URL structure, indexing, speed, microdata. Generate a prioritized report.
  2. Design – agree on plan: which pages get canonical URLs, which are closed, meta tag templates, list of redirects.
  3. Implementation – configure SEO module, SEF URLs, robots.txt, sitemap.xml, implement JSON-LD. Write custom handlers for auto-redirects and SEO filters.
  4. Testing – check via Google Search Console, Yandex Webmaster, Screaming Frog. Ensure duplicates disappear, crawler visits only relevant pages.
  5. Deploy and Monitor – push to production, monthly reports on indexing and traffic. Adjust as needed.

What Does SEO Configuration Include?

Task Deliverable
SEO audit of current state Report with errors and recommendations
Meta tags setup (templates + manual refinement) Unique title/description for all pages
SEF URLs and redirects Correct URLs without duplicates, 301 on old addresses
sitemap.xml + robots.txt Proper indexing, crawl budget protection
Schema.org microdata JSON-LD for products, brand, breadcrumbs
Loading speed Composite cache, WebP, minification
Index monitoring Monthly reports, adjustments
Documentation & handover Admin panel guide, access to monitoring tools
Company experience 10+ years in Bitrix, 50+ successful SEO projects

After deployment we provide two weeks of free post-launch monitoring and hotfixes. Extended support is available on a monthly retainer.

Timelines

Stage Duration
Basic setup (meta tags, SEF, sitemap, robots) 1–2 weeks
Schema.org for online store 1–2 weeks
Comprehensive technical SEO optimization 3–5 weeks
Speed optimization (Composite, images, CDN) 2–4 weeks
SEO filters with meta tags and SEF 2–3 weeks
Migration with redirects 1–3 weeks

We evaluate a project within 1 day. Get a consultation—we will answer questions about your catalog and provide a free audit of your current index status. Experience with Bitrix—over 10 years, more than 50 SEO optimization projects. Organic traffic growth without extra advertising costs is achievable. Contact us to discuss your project. Request a free audit now.