Populating an Articles Section with Content in 1C-Bitrix
An articles section differs from a blog in purpose: a blog is about relevance and traffic, articles are about expertise and conversion. Typical tasks: a product knowledge base, a technical description reference, a "Help" or "Learning" section. What matters here is not publication frequency but the depth of each piece of material and navigation across a large volume of content.
The problem that usually brings clients in: 200 articles have accumulated, but finding anything is impossible — there is no section-level search, no categorization, articles are mixed together, there are no internal links. The SEO potential of the section is unrealized; users go back to Google instead of finding answers on the site.
Articles Infoblock Architecture
A dedicated infoblock is created for the articles section. The section (b_iblock_section) structure matches the topic hierarchy — up to 3 levels of nesting. Deeper nesting is technically possible in Bitrix, but it harms navigation and SEO (long URLs, diluted page weight).
Required infoblock properties:
-
DIFFICULTY— material difficulty level (list: "Beginner", "Advanced", "Expert") -
READING_TIME— reading time in minutes -
LAST_UPDATED— date of the last article update (important for technical materials) -
RELATED_LINKS— multiple property of type "String" for external sources -
VIDEO_EMBED— video tutorial embed code
Publication date (ACTIVE_FROM) and update date (LAST_UPDATED) are separate fields. For technical articles it is important to show currency. The detail page template displays: "Last updated: January 15, 2025".
Search Within the Articles Section
The standard Bitrix search (bitrix:search.page) searches the entire site. For an articles section, search within the infoblock alone is often needed. This is handled in two ways:
Via the standard search module with a filter. Indexing the articles infoblock is configured through CSearch::Index(). Search with restriction by IBLOCK_ID parameter:
$obSearch = new CSearch();
$obSearch->Search([
'QUERY' => $searchQuery,
'MODULE_ID' => 'iblock',
'PARAM2' => IBLOCK_ARTICLES_ID,
]);
Via Elasticsearch / Sphinx for large sections (1,000+ articles). Standard MySQL/PostgreSQL full-text search is slow on complex queries. An external search engine is connected via a custom component; data is synchronized into it through a Bitrix agent.
Cross-References and Navigation
Navigation within an articles section is a critical element. A user arrived looking for an answer, found an article, and should be able to easily move to related topics.
Breadcrumbs — the standard bitrix:breadcrumb component, works automatically with a correct infoblock section structure.
Sidebar category menu — the bitrix:menu component with a MENU_TYPE parameter, or a custom component using CIBlockSection::GetList():
$sections = CIBlockSection::GetList(
['SORT' => 'ASC'],
['IBLOCK_ID' => IBLOCK_ARTICLES_ID, 'DEPTH_LEVEL' => 1, 'ACTIVE' => 'Y'],
false,
['ID', 'NAME', 'CODE', 'SECTION_PAGE_URL']
);
"Related articles" block — matched by section or tags:
$related = CIBlockElement::GetList(
['RAND' => 'ASC'],
['IBLOCK_ID' => IBLOCK_ARTICLES_ID, 'SECTION_ID' => $arResult['IBLOCK_SECTION_ID'], '!ID' => $arResult['ID'], 'ACTIVE' => 'Y'],
false, ['nTopCount' => 4],
['ID', 'NAME', 'PREVIEW_PICTURE', 'PREVIEW_TEXT', 'DETAIL_PAGE_URL']
);
Structured Data (Schema.org)
Article or HowTo markup is added for articles depending on the content type. This improves search display (rich snippets):
// in template.php of the detail page
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => $arResult['NAME'],
'datePublished' => $arResult['ACTIVE_FROM'],
'dateModified' => $arResult['PROPERTIES']['LAST_UPDATED']['VALUE'],
'author' => ['@type' => 'Organization', 'name' => 'Company Name'],
];
echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_UNICODE) . '</script>';
Bulk Population and Import
A large articles section is often populated from external sources: Word documents, PDF manuals, Google Docs. Manually entering each article into the Bitrix visual editor is inefficient.
Import from Excel. The standard Bitrix tool allows importing infoblock elements from CSV. Columns: NAME, PREVIEW_TEXT, DETAIL_TEXT, SECTION_ID, properties. But HTML markup in CSV is a problem: quotes and line breaks break the format. The solution is a custom PHP script using CIBlockElement::Add().
Conversion from Word/PDF. The PHPWord library (via Composer) reads DOCX and converts it to HTML. PDF is converted via pdftohtml (a system utility) or via an external API (Adobe PDF Services). The result is cleaned with regular expressions and saved to DETAIL_TEXT.
Content versioning. For technical documentation, tracking changes is important. Bitrix has no built-in versioning for article content (only for site pages via the landing module). A custom solution: before updating an article, the previous DETAIL_TEXT is saved to a separate table b_custom_article_versions with fields ELEMENT_ID, VERSION_DATE, CONTENT, USER_ID.
Automatic Updating of Outdated Articles
Technical articles become outdated. A notification system is needed: 6–12 months after publication a content manager receives a reminder to check relevance. Implemented via a Bitrix agent (CAgent::Add()) that checks the last update date monthly and sends an email via CEvent::Send().
Timelines
| Volume | Work format | Timeline |
|---|---|---|
| Up to 50 articles | Manual population + basic SEO | 2–3 weeks |
| 50–200 articles | + import, categorization, cross-linking | 3–6 weeks |
| 200+ articles | + section search, versioning | 6–12 weeks |
An articles section pays off slowly but steadily: technical materials hold their positions in search for years with a correct structure and periodic updates.







