1C-Bitrix Blog Content: SEO, Automation, and Images

Why a Blog on Bitrix Requires a Dedicated Approach? We often hear from clients: "We need a blog on Bitrix, like everyone else." We open the admin panel – a standard news infoblock with a couple of properties. But a real blog is not a press release feed. Each article should be a search magnet: ans

Our competencies:

Frequently Asked Questions

Why a Blog on Bitrix Requires a Dedicated Approach?

We often hear from clients: "We need a blog on Bitrix, like everyone else." We open the admin panel – a standard news infoblock with a couple of properties. But a real blog is not a press release feed. Each article should be a search magnet: answer a specific query, have a unique structure, and internal links to other articles. In one of our practices, after restructuring the blog and configuring all SEO fields, organic traffic grew by 70% in three months. CommerceML is an exchange protocol often used for catalog synchronization, but the blog is not transferred via it, so we implement import separately.

With a systematic approach, each new article strengthens the entire section: cross-linking via tags, auto-selection of related materials, and semantic closeness of headings. Our team has accumulated 10+ years of experience in Bitrix development and completed over 500 content projects. We know that a blog is not just a news feed but a full-fledged content marketing tool requiring deep infoblock, template, and SEO setting refinement.

Blog Infoblock: Differences from News

In the typical Bitrix structure, blog and news share the same mechanism, differing only in settings. For a blog, the infoblock is extended with additional properties:

  • READING_TIME — reading time (in minutes, automatically calculated)
  • AUTHOR_ID — link to an element of the "Authors" infoblock via property type "Element"
  • RELATED_ARTICLES — multiple property for the "Read Also" block
  • TABLE_OF_CONTENTS — auto-generated table of contents (JSON or HTML)
  • TAGS — tags, multiple property

A separate "Authors" infoblock allows outputting biography and other articles via CIBlockElement::GetByID() with minimal database queries.

How to Set Up a Table of Contents for Long Articles?

Blog articles are often longer than 3,000 characters. Without a table of contents, the user doesn't understand what awaits them and leaves. The standard TinyMCE in Bitrix does not generate a table of contents automatically – it needs to be implemented.

Criterion PHP Variant JS Variant
Load speed Faster: table of contents ready before render Slower: requires DOM processing
Visibility Immediate After JS execution
Support Requires template modification Template-independent
Implementation complexity Medium Low

Option 1: PHP script in component template. After obtaining DETAIL_TEXT, parse H2/H3 headings via DOMDocument, assign them id attributes, and form an array for the table of contents:

$dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadHTML('<meta charset="UTF-8">' . $arResult['DETAIL_TEXT']); $headings = $dom->getElementsByTagName('h2'); $toc = []; foreach ($headings as $h) { $text = $h->textContent; $id = Cutil::translit($text, 'ru', ['replace_space' => '-', 'replace_other' => '']); $h->setAttribute('id', $id); $toc[] = ['id' => $id, 'text' => $text]; } $arResult['DETAIL_TEXT'] = $dom->saveHTML(); $arResult['TOC'] = $toc; 

Option 2: Client-side JS. A script after page load finds all h2 in .article-body, assigns IDs, and builds the table of contents in a side column. Easier to implement, but the table of contents is not visible until JS runs.

How to choose a variant? If instant load and immediate table of contents visibility are required – choose PHP. If the component template should not be touched – JS will do. For sites with page caching, PHP is better because JS won't work if the script is not loaded.

Internal Cross-Linking

Blog articles should link to each other by topic. Manual placement of links in the text is labor-intensive and requires updates. A semi-automatic approach:

  1. In the RELATED_ARTICLES property, the content manager selects 3–5 related articles.
  2. In the detail page template, the "Read Also" block outputs these elements via CIBlockElement::GetByID().
  3. Additionally, a script automatically searches for keywords in the text and highlights them with links to relevant articles (based on the TAGS property).

SEO Optimization During Filling

Each article is a potential landing page. A minimum set of SEO settings at the infoblock element level:

  • META_TITLE: key query + brand, up to 65 characters
  • META_DESCRIPTION: answer to query + call to action, 150–160 characters
  • Canonical URL: if the article is available via multiple URLs, canonical points to the main one. Follow the recommendations from official Bitrix documentation for canonical setup.

In Bitrix, canonical is added in the template:

$APPLICATION->SetPageProperty('canonical', 'https://example.ru/blog/' . $arResult['CODE'] . '/'); 

If the blog is large (500+ articles), configure a sitemap via bitrix:main.map.google with a separate map for the blog, with priority 0.7–0.8 for fresh articles.

Images for the Blog

For social sharing, the OG image size is critical. Standard – 1200x630 px. In Bitrix, when uploading a detail picture, the component does not resize it for OG. We add automatic resizing:

$ogImage = CFile::ResizeImageGet( $arResult['DETAIL_PICTURE'], ['width' => 1200, 'height' => 630], BX_RESIZE_IMAGE_PROPORTIONAL_ALT ); $APPLICATION->SetPageProperty('og:image', SITE_SERVER_NAME . $ogImage['src']); 

Alt text for images is mandatory. In Bitrix, it is stored in the DESCRIPTION field of the b_file table record. When uploading via the standard form, the content manager must fill the "Description" field – this is the alt.

Categories and Tags: Navigation Structure

A typical mistake is creating 20 tags without a system, each with 1–2 articles. The correct structure:

  • Infoblock sections (blog categories) – broad topics: "Marketing", "Development", "Analytics". They are displayed as the main blog menu.
  • Tags – specific subtopics. They should appear in at least 3–5 articles.

Category and tag pages require separate SEO descriptions – via the section description in b_iblock_section (DESCRIPTION field) or via section properties.

How to Automate Blog Filling?

For a regular blog with high publication frequency, we use:

  • Excel/CSV import via the standard iblock module or a custom script with CIBlockElement::Add()
  • Parser of external sources – a Bitrix agent run via cron, fetching RSS or API, creating drafts with "inactive" status
  • OpenAI API for generating drafts based on headings and keywords (via \Bitrix\Main\Web\HttpClient)

Experience shows that automation pays off in 2-3 months if publishing 10+ articles per week.

What Is Included in the Work

  • Analysis of the current infoblock structure and SEO
  • Configuration of the blog infoblock with additional properties
  • Development of a template with automatic table of contents
  • Setup of SEO fields and canonical
  • Content import (up to 100 articles) with cross-linking
  • Automatic image resizing
  • Integration with 1C (if necessary)
  • Training of the content manager
  • Technical support for 1 month after deployment

Timelines

Volume What's Included Timeline
Up to 30 articles Filling, SEO, images, cross-linking 2–3 weeks
30–100 articles + Template setup with table of contents, authors 3–6 weeks
100+ articles + Import automation, categorization 6–10 weeks

The blog does not generate traffic immediately – first search positions appear after 2–4 months. But with a properly built process, each new article strengthens the entire section through internal links.

We will assess your project within 1 business day. Contact us for a consultation – we will prepare a commercial proposal with a detailed filling plan. Order turnkey blog content with a guaranteed result.