AACSearch / руководство
Программные SEO-страницы
Превратите фасет в индексируемые посадочные страницы с шаблонными метатегами, сгенерируйте их из живого индекса, проверьте результат и экспортируйте sitemap.
Правило превращает один фасет коллекции в посадочные страницы для поисковых
систем — по одной на значение фасета, — так что страница, которая существует
только как комбинация фильтров (бренд и ценовой диапазон), перестаёт быть
пустой для краулера. Правила — это шаблоны с подстановками #PLACEHOLDER#:
generateSeoPages материализует страницы из живого индекса, auditSeoPages
перепроверяет уже сгенерированное, а exportSeoSitemap формирует urlset.
Каждой операции на этой странице нужен полный ключ.
Создание правила
createSeoRule — POST /seo/rules:
await client.seo.createSeoRule({
collection: "products",
name: "Страницы брендов",
facet_field: "brand",
url_template: "#SECTION#/brand/#VALUE#",
templates: {
title: "#VALUE# — #SECTION# | #SITE_NAME#",
description: "#COUNT# товаров #VALUE# в #SECTION#.",
h1: "#VALUE#",
},
});| Подстановка | Во что превращается |
|---|---|
#SECTION# | коллекция |
#PROPERTY# | фасетное поле (brand) |
#VALUE# | значение фасета (Acme) |
#COUNT# | сколько документов несут это значение на момент генерации |
#SITE_NAME# | site_name правила либо название организации |
Нужен хотя бы один непустой шаблон (title, description, h1, text);
неизвестная подстановка отклоняется, а не рендерится как есть на живую
страницу. active: false (по умолчанию true) заставляет generateSeoPages
пропускать правило, не удаляя его.
| Операция | Эндпоинт |
|---|---|
listSeoRules | GET /seo/rules |
getSeoRule | GET /seo/rules/{ruleId} |
updateSeoRule | PUT /seo/rules/{ruleId} |
deleteSeoRule | DELETE /seo/rules/{ruleId} |
Генерация страниц
generateSeoPages — POST /seo/pages/generate — рендерит каждое активное
правило коллекции (или только rule_id) по живому индексу: счётчики фасетов
движка для facet_field дают по одной странице на значение, с #COUNT#,
равным числу документов с этим значением. Страница для значения, у которого
она уже есть, перерисовывается на месте; остальные создаются:
const report = await client.seo.generateSeoPages({ collection: "products" });
// { collection, rules, created, updated, total }listSeoPages (GET /seo/pages, постранично, с фильтром по collection)
выводит, что уже материализовано, — url, title, robots и когда страница
последний раз рендерилась:
const page1 = await client.seo.listSeoPages({ collection: "products", limit: 50 });Проверка и экспорт
auditSeoPages — POST /seo/pages/audit — перепроверяет сгенерированные
страницы организации (или одной collection) по их правилам и сообщает по
каждой странице: пустой title или description, правило, удалённое или
деактивированное после рендера, изменившиеся с тех пор шаблоны (страница
устарела), и директиву robots, которую страница заслуживает сейчас.
Результаты — рекомендательные: ничего не переписывается автоматически;
запустите generateSeoPages, чтобы исправить найденное:
const audit = await client.seo.auditSeoPages({ collection: "products" });
// audit.checked, audit.findings -> [{ page_id, url, robots, issues }]exportSeoSitemap — GET /seo/pages/sitemap — возвращает активные
индексируемые страницы как XML urlset, обёрнутый в JSON-строку (контракт
только JSON). Сохраните его по адресу sitemap, который отдаёт витрина:
curl -G https://api.aacsearch.com/v1/seo/pages/sitemap \
-H "X-NOVA-API-KEY: $NOVA_API_KEY" --data-urlencode "collection=products"Флаг active страницы решает, попадает ли она в sitemap вообще;
robots: "noindex" оставляет страницу доступной, но вне индекса поисковых
систем, не удаляя её.
Интерфейс магазина (aacsearch-ui)
Поиск, автодополнение, палитра ⌘K, чат поддержки, голосовой и фото-поиск, рекомендации — в React или на любой HTML-странице.
Ассистенты (RAG)
Создайте ассистента, который отвечает по вашим коллекциям, задавайте ему вопросы с сервера или из браузера, получайте ответ потоком, продолжайте диалоги и контролируйте стоимость.