AI-Powered SEO Text Generation for 1C-Bitrix
SEO texts for category pages are among the most tedious forms of copywriting and among the most expensive to produce manually. 500 categories × 800 words = 400,000 words. A freelance copywriter takes a month; an agency takes longer and costs more. AI handles this task in 2–3 days with controllable quality.
SEO Texts vs. Product Descriptions: Different Goals
A product description is information for the buyer. A category SEO text is content for search ranking, with useful information for the user woven in. The difference lies in structure and keyword usage.
Typical structure of a category SEO text:
- H2 with the main keyword ("Buy laptops in Minsk")
- Introductory paragraph answering "what can be found here"
- H3 "How to choose [category]" with practical tips
- H3 "Why buy from us" (store USP)
- Closing paragraph with a call to action
Gathering SEO Data for the Prompt
To generate an SEO text, pass the following to the AI:
- Category name and its path in the section tree
- Keywords for the page (from Yandex.Wordstat or SEMrush)
- Number of products in the category and subcategories
-
Price range (retrieved from
b_catalog_pricevia min/max) - Top brands in the category
- Filter attributes — what can be filtered on the page
Category data collector:
function buildCategoryContext(int $sectionId): array {
$section = CIBlockSection::GetByID($sectionId)->Fetch();
$priceRange = getPriceRange($sectionId); // SELECT MIN/MAX from b_catalog_price
$brands = getTopBrands($sectionId, 5); // top 5 brands by product count
$filterProps = getFilterProperties($sectionId); // smart filter properties
return [
'name' => $section['NAME'],
'breadcrumb' => getSectionBreadcrumb($sectionId),
'count' => $section['ELEMENT_CNT'],
'price_from' => $priceRange['min'],
'price_to' => $priceRange['max'],
'brands' => implode(', ', $brands),
'filter_params' => implode(', ', $filterProps),
];
}
Keywords in the Prompt
Pass 5–10 key phrases to the prompt that should appear naturally in the text:
Use the following keywords naturally (do not list them consecutively):
Primary: "buy laptop Minsk"
Secondary: "laptops online store", "laptop price", "gaming laptop", "laptop for work"
LSI: "processor", "RAM", "SSD", "display"
Keywords are stored in the SEO properties of infoblock sections (b_iblock_section_property) or in a dedicated Highload block SectionSeoKeywords.
Updating Section SEO Texts
Section SEO text is stored in b_iblock_section.DESCRIPTION. Writing via API:
$ibs = new CIBlockSection();
$ibs->Update($sectionId, [
'DESCRIPTION' => $generatedHtml,
'DESCRIPTION_TYPE' => 'html',
]);
For section meta tags — the same approach as for products, via \Bitrix\Iblock\InheritedProperty\SectionValues:
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($iblockId, $sectionId);
$ipropValues->save([
'SECTION_META_TITLE' => $metaTitle,
'SECTION_META_DESCRIPTION' => $metaDescription,
]);
Update Scheduler
SEO texts go stale: prices change, new brands appear, the product range is updated. Update strategy:
- Automatic: if the price range changes by more than 20% → regenerate
- Scheduled: quarterly full regeneration for all sections
- Triggered: when a new subcategory is added → regenerate the parent section
Uniqueness Control
Before publishing — check for uniqueness. A simple approach without external services: compare with already-published texts using similar_text(). If similarity > 40% — regenerate with a different seed (use temperature: 0.8 instead of the default 0.7).
Project Timeline
| Phase | Duration |
|---|---|
| Prompt design for each section type | 2–3 days |
| Section context builder (prices, brands, filter) | 1–2 days |
| Generator with keyword management | 1–2 days |
| Writing to Bitrix fields, section meta tags | 4–8 hours |
| Update scheduler, triggers | 1 day |
Total: 5–9 working days. With 500+ sections — initial generation time is 3–8 hours depending on the model.







