mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
feat: seo descriptions for 20 core tools, index follows content
This commit is contained in:
+39
-11
@@ -180,14 +180,24 @@
|
||||
Разбито на две группы: **domain-free** (делаем параллельно с покупкой домена) и
|
||||
**domain-required** (после покупки и DNS-настройки).
|
||||
|
||||
- [ ] **[S1h]** Снять `noindex, nofollow` со страниц инструментов
|
||||
(`web/src/routes/tools/[slug]/+page.svelte`) — заменить на
|
||||
`<meta name="robots" content="index, follow" />`. **Это первым
|
||||
обязательным шагом S1:** пока тег стоит, остальные задачи S1 готовят
|
||||
инфраструктуру, но не приводят трафик. Порядок: S1h ставится после
|
||||
S1b/S1c/S1d, иначе Google проиндексирует сайт без sitemap и canonical.
|
||||
Снимать `noindex` до готовности S2-контента осознанно не стоит: в индекс
|
||||
попадут тонкие страницы с одним title/description.
|
||||
- [x] **[S1h]** Robots-тег на страницах инструментов — **сделано 2026-10-12, но
|
||||
не снят, а сделан условным** (`web/src/routes/tools/[slug]/+page.svelte`):
|
||||
`index, follow` ставится **тогда и только тогда, когда у страницы есть
|
||||
EN-`seo`-блок** (`isPageIndexable()` в
|
||||
`web/src/lib/i18n/schema-tool-strings.ts`), иначе `noindex, nofollow`.
|
||||
Единого места правки нет: индексность следует за контентом, поэтому
|
||||
страницу нельзя забыть при написании текста и нельзя проиндексировать с
|
||||
заготовкой. Читается базовый словарь, а не объединённый, — переключение
|
||||
посетителя на RU не переворачивает тег. Тот же признак выкидывает
|
||||
noindex-страницы из sitemap (`gen-sitemap.mjs`), так что список в sitemap
|
||||
и набор индексируемых страниц не могут разойтись. **Страховка от «сломать
|
||||
руками»:** контентный гейт вынесен в
|
||||
`web/src/lib/i18n/schema-tool-strings.test.ts` — страница с `seo`-блоком
|
||||
обязана иметь ≥250 слов, ≥3 шага how-to, ≥3 FAQ и title/description в
|
||||
границах SERP, иначе тест падает до индексации. Проверено на сборке:
|
||||
`index, follow` ровно на страницах с текстом, `noindex` на остальных,
|
||||
sitemap совпадает с этим набором. **Осталось:** снять `noindex` совсем,
|
||||
когда текст появится у всех страниц, которые имеет смысл индексировать.
|
||||
|
||||
#### S1-free: без домена
|
||||
|
||||
@@ -255,6 +265,11 @@
|
||||
> `pnpm --dir web test:e2e` — по правилам `docs/quality-gates.md`, в CI job
|
||||
> `e2e` non-blocking, поэтому его статус читается по отдельному job
|
||||
> (`docs/decisions.md`, раздел 10).
|
||||
>
|
||||
> **Фактически (2026-10-12) порядок изменился:** S2-контент написан раньше
|
||||
> снятия `noindex`, а S1h сделан условным — индексность страницы равна наличию
|
||||
> её текста (S1h). Гейт выше в части «`noindex` отсутствует» выполняется для
|
||||
> страниц с текстом; полное снятие тега остаётся отдельной задачей.
|
||||
|
||||
### S2. Контентный слой (параллельно quality-плану, волнами по категориям)
|
||||
|
||||
@@ -282,9 +297,22 @@
|
||||
перелинковка, без неё страницы ядра плохо связаны между собой.
|
||||
- [ ] **[S2d]** Первая волна контента — топ приоритетных инструментов ядра
|
||||
(приоритет по вордстату: transparent png, jpg→png, compress, resize, crop,
|
||||
rotate, circle crop, add text, pixelate, grayscale…); отбор — §5. **В
|
||||
работе:** 2 страницы из 5-стадия (crop-png, resize-png) — это пилот формы,
|
||||
а не волна; до снятия `noindex` (S1h) нужны минимум все страницы §5.
|
||||
rotate, circle crop, add text, pixelate, grayscale…); отбор — §5. **Ядро
|
||||
закрыто: 20 страниц из §5** — `crop-png`, `resize-png`,
|
||||
`remove-background-png`, `convert-png-to-jpg`, `pixelate-png`,
|
||||
`grayscale-png`, `rotate-png`, `create-empty-png`, `linear-gradient-png`,
|
||||
`change-png-opacity`, `set-alpha-channel-png`, `round-corners-png`,
|
||||
`invert-colors-png`, `flip-png`, `convert-png-to-webp`, `png-to-bmp`,
|
||||
`svg-to-png`, `png-to-base64`, `change-aspect-ratio-png`, `add-text-png`.
|
||||
Каждая: `title` (H1), `metaTitle` (38–54 симв.), `metaDescription`
|
||||
(134–159 симв.), `longDescription`, how-to (3–5 шагов) и 4 FAQ. Текст
|
||||
написан по фактической схеме инструмента (параметры реестра), без
|
||||
шаблонной подстановки. **Правило набора текста, которое доказало себя на
|
||||
пилоте:** H1 — чистый интент, «free / no upload» — в `metaTitle` и
|
||||
`metaDescription`, форматы — в первом абзаце и FAQ, ограничения
|
||||
инструмента проговариваются прямо («это не AI-удаление фона», «только
|
||||
90/180/270, произвольный угол ресемплит»). Честное ограничение работает
|
||||
лучше приписывания. Остальное ядро §5 — тем же шаблоном.
|
||||
- Гейты: на каждой странице инструмента — уникальный текст ≥ 300 слов, H1
|
||||
совпадает с интентом, FAQ ≥ 3, related ≥ 3; текст в статике (prerender), не в
|
||||
рантайме.
|
||||
|
||||
Reference in New Issue
Block a user