From 71b37935c27b77361de79bfaa8eb4dd6ef4e8070 Mon Sep 17 00:00:00 2001 From: striker Date: Sat, 30 May 2026 21:09:25 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20SEO-=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=82=D0=BA=D1=83=20=D0=BF?= =?UTF-8?q?=D0=BE=20RSS-=D0=B0=D0=B3=D1=80=D0=B5=D0=B3=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=83=20=D0=B2=20CLAUDE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index d5b2aa9..478a809 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -174,8 +174,17 @@ npm run preview Если 4321 занят — Astro сам найдёт следующий свободный (4322 и т.д.). +## SEO — правила для контента + +**Обязательно** для каждого нового поста/страницы в `src/content/{posts,pages}/*.md`: +- `description:` — уникальное, 120–160 символов. **Не оставлять пустым** — пустая строка не падает на дефолт `SITE_DESCRIPTION`, а передаётся в `` как есть. +- `[slug].astro` передаёт `description={entry.data.description ?? ''}` → BaseLayout. Если `''` — meta пустой. + +**RSS-агрегатор новостей:** источники добавляются в `src/data/feeds.json` (`{name, url, enabled: true, max}`). После push → CI → на следующем cron-тике (каждый час в `:12`) появятся на `/news/`. + ## История - **2026-05-08:** v1 (WordPress 6.x) контейнеризован, миграция со str-u-01 на web.hhivp.com - **2026-05-14:** фикс trust-proxy.conf для Docker bridges (Better WP Security) - **2026-05-21:** v2 редизайн — Vite+React → Astro 5 (стек как у `anotherreflections-website-v2`). Cutover, бэкап старого WP в репо `pushkinohistory-ru` + БД на `db.hhivp.com` (~2 недели на наблюдение). +- **2026-05-30:** заполнены descriptions всем 11 страницам/постам (были пустыми → дубли в Я.Вебмастере).