mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
411 lines
36 KiB
Markdown
411 lines
36 KiB
Markdown
# План: SEO + GEO — индексация и конкуренция в image tools
|
||
|
||
> **Статус: active.** Адреса страниц инструментов — `/tools/<id>` (`crop-png` и
|
||
> подобные), каталог — `/list-tools`; отдельного поля `slug` в реестре пока нет,
|
||
> `id` и есть адрес.
|
||
>
|
||
> **`noindex, nofollow` выставлен на каждой странице инструмента**
|
||
> (`web/src/routes/tools/[id]/+page.svelte`) — осознанно, до появления
|
||
> уникального контента (S2). Пока он стоит, сайт не индексируется вообще, и
|
||
> **S1b–S1e (sitemap, `robots.txt` с `Sitemap:`, canonical, OG) не дают
|
||
> эффекта**: их имеет смысл делать вместе со снятием `noindex`, а не вместо
|
||
> него. Условие снятия и порядок — §4, S1.
|
||
>
|
||
> **Цель:** страница каждого инструмента — индексируемый лендинг под конкретный
|
||
> интент («crop png», «make png transparent», «jpg to png»…) плюс попадание в
|
||
> ответы генеративных систем (ChatGPT, Perplexity, AI Overviews) — GEO.
|
||
>
|
||
> **Позиционирование:** не «PNG-инструменты», а **image tools с PNG-ядром** —
|
||
> любой инструмент принимает PNG/JPG/WebP/GIF/BMP и отдаёт результат в
|
||
> PNG/JPG/WebP/BMP через селектор в кнопке Download. Дифференциатор —
|
||
> прозрачность/альфа/фон и no-upload-приватность. Референс-конкурент по ядру —
|
||
> onlinepngtools.com (§2). Долгосрочно ядро переезжает на wasm и обрастает API +
|
||
> PWA (`docs/plan-platform.md`); для SEO это аргументы дистрибуции и GEO-факты,
|
||
> схему сайта они не меняют.
|
||
>
|
||
> **Слаги в этом документе:** `jpg-to-png`, `crop-jpeg` и подобное — интенты и
|
||
> URL конкурента, а не id наших инструментов. Наши id — в `docs/tools-map.md`; в
|
||
> тексте ниже реальные id инструментов приводятся в бэктиках.
|
||
|
||
## 0. Решения
|
||
|
||
- **Бренд: переименовать до индексации** (новое имя и домен сознательно не
|
||
записаны в этом репозитории — чек-лист в локальном файле
|
||
`plan-domain.local.md`, см. §6, он вне git: выбранное имя не должно утекать в
|
||
историю коммитов до покупки домена). Легенда честная: «started as PNG tools,
|
||
now all formats» — это контент-плюс, а не баг. Адреса страниц
|
||
(`/tools/crop-png`) и localStorage-ключи не переименовывать (см. решение про
|
||
`slug` ниже). Точка истины по бренду: константа в i18n + README; хардкод в
|
||
компонентах недопустим.
|
||
- **Форматы: формат = выбор в UI, не отдельные страницы.** Download-кнопка
|
||
каждого инструмента — с селектором PNG/JPG/WebP/BMP (+quality для lossy). Райз
|
||
«выбор формата/качества в Download» вытащен из backlog №7 в S1f: механика уже
|
||
есть (`ToolEntry.output`), нужна как продуктовая основа «image
|
||
tools»-позиционирования. В направлении «из формата в PNG» отдельных
|
||
инструментов нет (загрузка принимает любой формат) — см. §5.
|
||
- **Адреса страниц `-png` сохраняются, внутренние имена — без.** Инструмент
|
||
работает с любым форматом, поэтому его `id` не должен врать (`crop`, а не
|
||
`crop-png`); png-интент держит адрес страницы и имя скачиваемого файла.
|
||
Требуется поле `slug` в `ToolEntry` + переход `routes/tools/[id]` → `[slug]`.
|
||
**Сейчас не реализовано:** в реестре `id: "crop-png"`, поля `slug` нет, роут —
|
||
`tools/[id]/`; текущее состояние описано в `docs/architecture.md`, раздел 3.
|
||
**Следствие для SEO: редиректы не нужны, canonical и sitemap не меняются,
|
||
адреса остаются теми же** — поэтому это безопасная правка, которую можно
|
||
делать до индексации, а не после. Побочная выгода: широкие интенты («crop
|
||
image online») переносятся теми же страницами контентом — H1 «Crop image»,
|
||
текст «works with PNG, JPG, WebP»; URL-алиасы без `-png` по-прежнему не
|
||
создаются (канонический беспорядок). Порядок работ — `docs/backlog.md`, задача
|
||
«Слаги инструментов (`*-png`) — развести `id` и адрес страницы».
|
||
- **Индексируемая локаль — EN** (базовая; конкурент англоязычный). RU-версия —
|
||
отдельно и позже: префикс `/ru/`, prerender обеих локалей, hreflang
|
||
(сознательно отложено). Пока язык переключается на клиенте (localStorage) —
|
||
для SEO не учитываем.
|
||
- **Прод-домен без `BASE_PATH`.** Сборка с базой (GitHub Pages `/repo/`, см.
|
||
`BASE_PATH` в `web/vite.config.ts` и `deploy.yml`) ломает абсолютные URL,
|
||
canonical и «корневость» страниц. Свой домен + корень. Текущий деплой — GitHub
|
||
Pages (`.github/workflows/deploy.yml`); перенос на свой домен выполняется
|
||
сменой origin в CI и `PUBLIC_SITE_ORIGIN`.
|
||
- **URL-схема инструментов:** короткие плоские адреса — `/tools/<id>` для
|
||
инструмента, `/list-tools` для каталога, где `<id>` берётся из записи реестра.
|
||
Схему не менять без отдельного SEO-плана: после индексации переименование URL
|
||
означает 301 и потерю позиций. Разделение `id`/`slug` (решение выше) адресов
|
||
не меняет.
|
||
- **Без GA и рекламных скриптов:** аналитика — self-hosted Plausible/Umami или
|
||
Cloudflare Web Analytics. «No tracking» — часть позиционирования, её нельзя
|
||
подрывать собственными скриптами.
|
||
- **Честные методы.** Никакого клонированного текста, дорвеев, PBN. Контент — по
|
||
каждому инструменту, с ручной вычиткой.
|
||
|
||
## 1. Аудит (2026-09-09)
|
||
|
||
Фундамент уже есть:
|
||
|
||
- SvelteKit + `adapter-static`, `prerender = true` на весь сайт
|
||
(`web/src/routes/+layout.ts`) — весь контент в статичном HTML, ботам не нужен
|
||
JS. Это главный технический козырь.
|
||
- Инструменты в `web/src/lib/registry` с «SEO-шными» id (`crop-png`,
|
||
`add-border-png`, …) — URL уже повторяют паттерн конкурента. Актуальный
|
||
состав: `docs/tools-map.md`.
|
||
- На корневых страницах инструментов есть базовые `<title>` и `robots`; полный
|
||
SEO-слой (canonical, OG, content и JSON-LD) остаётся S1/S2.
|
||
- Каталог со ссылками на все инструменты (внутренняя перелинковка) и карта
|
||
инструментов против конкурента: `docs/tools-map.md`.
|
||
- EN-тексты в реестре + i18n-словари ru/en.
|
||
|
||
Чего нет (пробелы закрываются этапами ниже):
|
||
|
||
| Пробел | Где сейчас | Этап |
|
||
| -------------------------------------------------- | ----------------------------------- | ---- |
|
||
| `noindex` на страницах инструментов | стоит (`+page.svelte`) | S1 |
|
||
| `sitemap.xml` | нет | S1 |
|
||
| `robots.txt` без `Sitemap:` | allow-all (`web/static/robots.txt`) | S1 |
|
||
| `rel=canonical` | нет | S1 |
|
||
| OG/Twitter-теги, OG-картинки | нет | S1 |
|
||
| Канонический домен в абсолютных URL | нет, деплой на GitHub Pages с базой | S1 |
|
||
| Контент страницы (H1-текст, how-to, FAQ, related) | только title/description | S2 |
|
||
| JSON-LD (SoftwareApplication, FAQPage, Breadcrumb) | нет | S3 |
|
||
| `llms.txt`, хабы категорий с текстом | нет | S3 |
|
||
| GSC + приватная аналитика | нет | S4 |
|
||
|
||
Строка `noindex` — первая не потому, что её сложнее всего, а потому, что она
|
||
блокирует всё остальное: пока тег стоит, остальные строки таблицы не дают
|
||
трафика. Подробности и условие снятия — §4, S1.
|
||
|
||
## 2. Конкурент (onlinepngtools.com)
|
||
|
||
Снято с живого сайта (2026-09-09):
|
||
|
||
- ~311 URL в sitemap, все плоские (`/crop-png`, `/create-transparent-png`);
|
||
title вида «Crop a PNG – Online PNG Maker».
|
||
- Страница инструмента: h1 + 2–3 абзаца («World's simplest…», import/crop
|
||
примеры), примеры «before/after», how-to-блок, огромные футерные перелинковки
|
||
(серии Logo*/Icon*/Stamp*), страницы-хабы, price-wall.
|
||
- Сила: возраст домена, ссылочная масса, бренд, охват, серии-клоны под длинные
|
||
хвосты.
|
||
- Слабость (наш контраргумент): реклама, ежедневные лимиты free-плана, платное
|
||
коммерческое использование, апселл-модалки, страницы по ~450 КБ.
|
||
- Наш ответ в контенте каждой страницы: **no upload (всё локально в браузере),
|
||
no signup, no limits, бесплатно в т.ч. для коммерческого использования, open
|
||
source**.
|
||
|
||
## 3. Стратегия
|
||
|
||
1. **Не лобовая, а ядро интентов.** 80% объёма поиска приносят ~30–50 запросов.
|
||
Покрытие инструментов у нас почти полное (список — `docs/tools-map.md`);
|
||
приоритет — контент и качество страниц ядра, затем хвосты.
|
||
2. **Страница = лендинг, а не «пустая коробка».** Шаблон контента: H1 → 1–2
|
||
абзаца «что делает» → как использовать (шаги) → параметры → FAQ (3–5 вопросов
|
||
уровня People-Also-Ask) → related tools по категории.
|
||
3. **CWV как измеримое преимущество.** Лёгкие быстрые страницы против ~450-КБ
|
||
страниц конкурента; после редизайна не потерять скорость.
|
||
4. **GEO.** LLM-системы цитируют страницы с прямыми определениями, списками,
|
||
таблицами и уникальными фактами. Всё это уже есть в данных реестра — отдавать
|
||
в HTML-структуре, без воды.
|
||
5. **Информационный контур — потом, не вместо.** Гайды по форматам (PNG/JPEG/
|
||
WebP: история, модификации, lossy/lossless, прозрачность, «png vs jpeg») дают
|
||
E-E-A-T, перехватывают сравнительные запросы и служат хабами внутренних
|
||
ссылок на инструменты. Но это этап S3e и только после того, как написано ядро
|
||
S2: транзакционная страница приносит конверсию, информационная — только
|
||
трафик. Тонкие FAQ-страницы «про всё» не заводить — несколько сильных
|
||
материалов с ссылками на 3–5 инструментов каждый.
|
||
6. **Дистрибуция.** GitHub-репо (звёзды/форки = сигналы), alternative.to,
|
||
Product Hunt, Reddit по интенту — реальный путь набрать первые бэклинки без
|
||
бюджетов.
|
||
|
||
## 4. Этапы
|
||
|
||
### S1. Технический минимум (закрывает блокер индексации)
|
||
|
||
Разбито на две группы: **domain-free** (делаем параллельно с покупкой домена) и
|
||
**domain-required** (после покупки и DNS-настройки).
|
||
|
||
- [ ] **[S1h]** Снять `noindex, nofollow` со страниц инструментов
|
||
(`web/src/routes/tools/[id]/+page.svelte`) — заменить на
|
||
`<meta name="robots" content="index, follow" />`. **Это первым
|
||
обязательным шагом S1:** пока тег стоит, остальные задачи S1 готовят
|
||
инфраструктуру, но не приводят трафик. Порядок: S1h ставится после
|
||
S1b/S1c/S1d, иначе Google проиндексирует сайт без sitemap и canonical.
|
||
Снимать `noindex` до готовности S2-контента осознанно не стоит: в индекс
|
||
попадут тонкие страницы с одним title/description.
|
||
|
||
#### S1-free: без домена
|
||
|
||
- [ ] **[S1e]** OG-картинки per-tool: генерация PNG-карточек скриптом на
|
||
существующем ядре (мы сами умеем рисовать PNG) — имя инструмента + бренд,
|
||
файл `static/og/[id].png`, ссылка из `Seo.svelte`. Относительные пути
|
||
(`/og/crop-png.png`) работают без домена; при деплое на собственном домене
|
||
OG-картинки будут абсолютными и корректными.
|
||
- [ ] **[S1f]** Download-кнопка с селектором формата PNG/JPG/WebP/BMP (+quality
|
||
для lossy) для всех инструментов — механика `ToolEntry.output` уже есть
|
||
(`docs/backlog.md`, «Идеи» №6, UX-райз «Download»). Продуктовая основа
|
||
«image tools»-позиционирования: без неё сайт остаётся PNG-сайтом. Вести
|
||
параллельно с текущими quality-задачами.
|
||
- [ ] **[S1g]** Поведение конвертеров после S1f: не предлагать в меню форматов
|
||
формат исходника (disable) — чтобы `convert-png-to-jpg` не мог сохранить в
|
||
png. Существующие страницы не трогать: `convert-png-to-jpg`,
|
||
`convert-png-to-webp`, `png-to-bmp` остаются самостоятельными лендингами
|
||
со своим контентом (§5).
|
||
|
||
#### S1-domain: с доменом (после покупки + DNS)
|
||
|
||
- [ ] **[S1a]** Перевести прод на собственный домен: убрать `BASE_PATH` из
|
||
`deploy.yml`, задать `PUBLIC_SITE_ORIGIN`, перенаправить
|
||
`https://<юзер>/<repo>/…` на корневые URL (301). Делается одновременно с
|
||
S1d (canonical), чтобы Google проиндексировал сразу с правильным доменом.
|
||
- [ ] **[S1b]** Скрипт `web/scripts/gen-sitemap.mjs`: генерирует `sitemap.xml` в
|
||
`build/` из `TOOLS` реестра (`web/src/lib/registry`) + статических
|
||
страниц. Вызов из `pnpm build` после `vite build` (adapter-static пишет в
|
||
`build/`, дописываем файл там же). Origin — из env (`PUBLIC_SITE_ORIGIN`),
|
||
учёт опционального `BASE_PATH`.
|
||
- [ ] **[S1c]** `robots.txt`: `Sitemap:` + закрыть служебный `/kit`; после
|
||
cleanup — вернуть минимальный allow-all.
|
||
- [ ] **[S1d]** Компонент `Seo.svelte` (kit): canonical (абсолютный URL по
|
||
актуальному маршруту), OG-теги (title/description/type/url/image),
|
||
twitter:card. Подключить в root-layout. **Требует `PUBLIC_SITE_ORIGIN`**
|
||
для абсолютных URL в canonical и OG:url.
|
||
|
||
> **Порядок S1:** S1e/S1f/S1g → покупка домена → S1a+S1b+S1c+S1d → **S1h**
|
||
> (снятие `noindex`) → S2-контент. Гейты: `pnpm --dir web build` зелёный; в
|
||
> `build/` лежит корректный `sitemap.xml` со всеми инструментами; canonical/OG
|
||
> присутствуют на всех страницах; `noindex` отсутствует в собранном HTML
|
||
> (`pnpm --dir web build` и проверка `build/tools/*/index.html`);
|
||
> `pnpm --dir web test:e2e` — по правилам `docs/quality-gates.md`, в CI job
|
||
> `e2e` non-blocking, поэтому его статус читается по отдельному job
|
||
> (`docs/decisions.md`, раздел 10).
|
||
|
||
### S2. Контентный слой (параллельно quality-плану, волнами по категориям)
|
||
|
||
- [ ] **[S2a]** Схема данных: `seo`-блок per-tool (`longDescription`,
|
||
`howTo: string[]`, `faq: {q, a}[]`) — в i18n-словарях (ru/en), не в коде
|
||
реестра. Черновики — генерацией из схемы параметров инструмента, вычитка
|
||
вручную пачками по категориям (самый трудоёмкий этап: объём растёт вместе
|
||
с числом инструментов × 2 локали; RU — отложить до решения о `/ru/`).
|
||
- [ ] **[S2b]** Компонент контента страницы инструмента (kit): H1, lead, how-to
|
||
(`ol`), описание параметров (из схемы), FAQ, related tools (перелинковка
|
||
внутри категории + 2–3 «соседних» интента).
|
||
- [ ] **[S2c]** Хлебные крошки (Каталог → Категория → Инструмент) в UI.
|
||
- [ ] **[S2d]** Первая волна контента — топ-30 инструментов ядра (приоритет по
|
||
вордстату: transparent png, jpg→png, compress, resize, crop, rotate,
|
||
circle crop, add text, pixelate, grayscale…).
|
||
- Гейты: на каждой странице инструмента — уникальный текст ≥ 300 слов, H1
|
||
совпадает с интентом, FAQ ≥ 3, related ≥ 3; текст в статике (prerender), не в
|
||
рантайме.
|
||
|
||
### S3. Структурированные данные + GEO
|
||
|
||
- [ ] **[S3a]** JSON-LD: `SoftwareApplication` (+ `offers` price 0) и `FAQPage`
|
||
на страницах инструментов; `WebSite` + `Organization` на главной;
|
||
`BreadcrumbList` на всех внутренних. Учесть: Google ограничил rich results
|
||
по FAQ/HowTo для мелких сайтов — разметка нужна прежде всего для
|
||
LLM-парсинга, она безвредна.
|
||
- [ ] **[S3b]** `llms.txt` в статике: короткий манифест сайта + список
|
||
инструментов с одним предложением на каждый (генерится из реестра тем же
|
||
скриптом, что sitemap).
|
||
- [ ] **[S3c]** Хабы категорий с текстом: 2–3 абзаца на категорию (что за
|
||
группа, когда какие инструменты применять), не голые списки карточек.
|
||
- [ ] **[S3d]** GEO-редактура: каждое описание начинается прямым определением
|
||
(«Crop PNG is a free tool that cuts a rectangular area from a PNG image
|
||
right in your browser»), списки/таблицы для фактов, без вводных «в
|
||
современном мире…». Проверка: страница отвечает на запрос одним абзацем
|
||
«без скролла».
|
||
- [ ] **[S3e]** _(опционально)_ Информационные гайды по форматам: 3–4 сильных
|
||
материала (`/guides/png-format`, `/guides/jpeg-vs-png`, …): история и
|
||
модификации формата, lossy/lossless, прозрачность, когда какой формат
|
||
выбирать. Каждый — с ссылками на 3–5 связанных инструментов (хабы
|
||
перелинковки), FAQ из гайдов продублирован как FAQPage-разметка. Приоритет
|
||
ниже S2/S3a–d: только когда ядро написано и есть ресурс.
|
||
- Гейты: валидация JSON-LD (Rich Results Test без ошибок); `llms.txt` актуален
|
||
при добавлении инструментов (генерация, а не ручное редактирование).
|
||
|
||
### S4. Измерение и запуск
|
||
|
||
- [ ] **[S4a]** Google Search Console: собственность на домен, отправка sitemap,
|
||
мониторинг индексации и запросов. Бесплатно и обязательно.
|
||
- [ ] **[S4b]** Аналитика без трекинга: self-hosted Plausible/Umami либо
|
||
Cloudflare Web Analytics. GA/ЯМ не ставим (позиционирование).
|
||
- [ ] **[S4c]** Дистрибуция: закрепить GitHub-репо (README со скриншотами),
|
||
подача на alternative.to (страница против конкурента), Product Hunt,
|
||
тематические Reddit/HN-треды. Бэклинки — главный дефицит для конкуренции.
|
||
- [ ] **[S4d]** _(опционально, позже)_ Сравнительные посадочные «vs …» (без
|
||
негатива: «no limits, no signup, no upload») — по мере роста доверия
|
||
домена.
|
||
- [ ] **[S4e]** Контроль CWV: Lighthouse на страницы ядра после каждого крупного
|
||
этапа редизайна; цель — зелёные метрики на мобильных.
|
||
|
||
## 5. Приоритизация инструментов (первая волна контента)
|
||
|
||
Источник — `docs/tools-map.md` (наш состав и замер по конкуренту — §2). Ids ниже
|
||
— **фактические id реестра**; первая волна — топ-интенты, где конкуренты
|
||
ранжируются, а у нас уже есть инструмент и он не хуже:
|
||
|
||
- прозрачность/фон: create-empty-png, remove-background-png, change-png-opacity,
|
||
set-alpha-channel-png
|
||
- конвертация: convert-png-to-jpg, convert-png-to-webp, png-to-bmp, svg-to-png,
|
||
png-to-base64
|
||
- геометрия: crop-png, resize-png, rotate-png, round-corners-png, flip-png,
|
||
change-aspect-ratio-png
|
||
- цвет/фильтры: grayscale-png, invert-colors-png, pixelate-png, add-text-png,
|
||
watermark-tile-png
|
||
- генерация: linear-gradient-png, create-empty-png
|
||
|
||
> **Открытый вопрос по интентам «из формата в PNG».** У конкурента есть
|
||
> `jpg-to-png`, `webp-to-png`, `gif-to-png` как отдельные страницы; у нас таких
|
||
> инструментов нет и создавать их не хочется — загрузка файла уже принимает
|
||
> любой формат, а конвертер «во что-то» закрывает обратное направление. Это
|
||
> high-volume интент без посадочной страницы. Решение (страница-обёртка на
|
||
> существующий инструмент / приём в H1 и тексте / ничего) требует вордстата и
|
||
> должно быть принято до старта S2, иначе первая волна контента закроет не ядро
|
||
> запросов.
|
||
|
||
Новая волна форматов (после S1f): jpg↔webp и другие конвертации «формат →
|
||
формат» — только по подтверждённому вордстату; базовые кейсы закрывает селектор
|
||
формата в Download (S1f), страницы заводим лишь там, где интент стабильно
|
||
ищется.
|
||
|
||
- **crop-png: H1 «Crop image online — free, no upload»**, текст «works with PNG,
|
||
JPG, WebP» — широкий интент обслуживается контентом страницы с png-слагом,
|
||
слаг при этом остаётся якорем дешёвого png-интента.
|
||
|
||
### Форматные варианты страниц (`crop-jpeg`, `crop-webp`, …)
|
||
|
||
Три возможных механики — важно не перепутать:
|
||
|
||
1. **301-редирект на существующую страницу** (`/crop-jpg` → `/crop-jpeg`, или
|
||
`/crop-png` → новый слаг после переименования) — законно **только** для
|
||
опечаток, альтернативных написаний и переименований **уже опубликованной**
|
||
страницы: URL, которого никогда не было в индексе, редиректом не закрывается.
|
||
Для самостоятельного запроса редирект — это отказ от страницы: Google
|
||
перестаёт показывать редирект, ранжировать будет только цель. Как посадочная
|
||
под «crop jpeg» не работает вообще.
|
||
2. **Зеркало с canonical на `/crop-png`** — технически легально, но бесполезно:
|
||
canonical-дубль в индекс не попадает, видимости не добавляет, а массовое
|
||
производство таких зеркал выглядит как накрутка площади и при ошибке в
|
||
canonical превращается в дорвейный кластер. Не делаем.
|
||
3. **Самостоятельная страница = самостоятельный контент.** Заводить `/crop-jpeg`
|
||
можно только если: (а) интент подтверждён вордстатом, (б) на странице
|
||
собственный текст — H1 «Crop JPEG», FAQ про качество/артефакты/ когда
|
||
выбирать JPEG вместо PNG, отличия от png-кейса, (в) текст написан или выверен
|
||
человеком, а не получен подстановкой формата в шаблон. Реестром
|
||
автоматизировать **данные** (тот же tool, другой дефолтный output) — можно;
|
||
автоматизировать **текст** — нельзя: массовая подстановка {tool}×{format} в
|
||
шаблон — doorway-паттерн, риск deindex всего сайта.
|
||
|
||
Как правильно получать видимость под «jpeg»/«webp» без клонов: широкие
|
||
формулировки закрывает контент существующей страницы (H1 «Crop image», «works
|
||
with PNG, JPG, WebP» в тексте + селектор формата в Download, S1f). Отдельные
|
||
форматные страницы — точечные исключения по вордстату, не серия.
|
||
|
||
### Convert-инструменты: страницы и «универсальный конвертер»
|
||
|
||
Разводить два разных интента:
|
||
|
||
- **«convert png to jpg»** — интент «страница-конвертер»: пользователь ищет
|
||
конкретную пару форматов (лучшее качество конверсии, меньше ошибок), это
|
||
готовые лендинги. Существующие (`convert-png-to-jpg`, `convert-png-to-webp`,
|
||
`png-to-bmp`, `svg-to-png`, `base64-to-png`, …) **оставить и наполнить
|
||
контентом как все**: свой H1 («Convert PNG to JPG — free, no upload»), FAQ про
|
||
качество/прозрачность/фон, related. Селектор формата (S1f) их **не заменяет**
|
||
— он про «уже открыл инструмент и хочу другой формат на выходе».
|
||
- **«convert image» / «image converter»** — интент «швейцарский нож». Под него —
|
||
**один будущий инструмент `/convert-image`**: сначала пустой **core-tool** в
|
||
`core/` — функция ре-энкода («копия с перекодированием»: декодирует любой
|
||
поддержанный исходник в ImageData и кодирует в выбранный формат; поверх неё
|
||
S1f строит селектор формата). `ToolEntry` и страницу добавлять **только вместе
|
||
с собственным текстом** («Convert any image to PNG, JPG or WebP in your
|
||
browser») — core в коде не обязывает к странице. Этот же шаблон потом
|
||
закрывает форматные волны (jpg→webp и т.п.) без новых страниц.
|
||
|
||
Не делать: серию `convert-jpeg`/`convert-webp`-клонов с подстановкой формата
|
||
(doorway, см. выше) и «универсальный конвертер» как единственную страницу вместо
|
||
форматных лендингов — теряется ядро «convert png to jpg»-запросов.
|
||
|
||
Правило добавления новых инструментов: брать из хвоста конкурента только те
|
||
интенты, которые подтверждены вордстатом, и сразу с контентом S2 (страница без
|
||
текста — потраченный URL).
|
||
|
||
## 6. Переименование бренда и домен (сделать до S1-domain, дёшево сейчас)
|
||
|
||
Выбранное имя и домен **в этом репозитории не записаны**: детальный чек-лист
|
||
лежит в локальном файле `plan-domain.local.md` рядом с этим планом, он исключён
|
||
из git через `.gitignore`, чтобы имя не попало в историю коммитов до покупки
|
||
домена. Агент, работающий из клона, этого файла не увидит — при необходимости
|
||
попросить чек-лист у пользователя.
|
||
|
||
- [ ] **[R1]** Механический переезд бренда на новое имя. Список файлов и строк с
|
||
хардкодом — в локальном плане (раздел «Где живёт бренд в коде»); здесь
|
||
только SEO-ограничения. **НЕ трогать:** адреса страниц инструментов
|
||
(`/tools/crop-png`), ключи localStorage (`easy-png-tools:*` — или
|
||
мигрировать отдельной мелочью), историю `docs/archive`. Бренд должен стать
|
||
i18n-константой, а не тремя независимыми хардкодами.
|
||
- [ ] **[R2]** Купить выбранный домен (кандидаты и пробы — в локальном плане) и
|
||
перевести прод на него без `BASE_PATH` (§0). Домен нужен до S1-domain:
|
||
canonical и sitemap генерятся от `PUBLIC_SITE_ORIGIN`.
|
||
- **Порядок:** R1+R2 можно делать параллельно с текущими quality-задачами (не
|
||
блокируют). R2 (домен) — блокер для S1-domain (canonical + sitemap), а
|
||
S1-domain — блокер для S1h (снятие `noindex`). После индексации переименование
|
||
= переезд с 301, потеря позиций и ссылок — не делать.
|
||
|
||
## 7. Что осознанно НЕ делаем
|
||
|
||
- Клонирование всего каталога конкурента (низкокачественные дубли + нет ресурсов
|
||
на контент) — вместо этого ядро + обоснованные хвосты.
|
||
- RU-локаль в индексе до решения о структуре `/ru/` + hreflang.
|
||
- GA/реклама/трекинг — противоречит позиционированию.
|
||
- Дорвеи, программные зеркала, покупные ссылки.
|
||
- Массово-сгенерированные форматные клоны (`crop-jpeg`/`crop-webp` как копии
|
||
`crop-png` с подстановкой формата в шаблонный текст) — doorway-паттерн, риск
|
||
deindex всего сайта. Форматная страница — только уникальный контент + вордстат
|
||
(§5); редиректы — только для опечаток/переименований.
|
||
- URL-алиасы без `-png` для существующих инструментов и зеркальные
|
||
страницы-конвертеры «на каждый формат» без вордстата.
|
||
|
||
## 8. Связанные документы
|
||
|
||
- `docs/tools-map.md` — карта «наш инструмент ↔ интент конкурента».
|
||
- `docs/backlog.md` — пункты SEO/GEO в общем бэклоге.
|
||
- `docs/roadmap.md` — фазы 2–8 (ядро TS→Rust/wasm, CLI), фаза 11 (пайплайн);
|
||
фазы 9–10 — API и PWA.
|
||
- `docs/plan-platform.md` — планы API и PWA (общее ядро, оффлайн-режим).
|
||
- `plan-domain.local.md` — локальный чек-лист переименования и покупки домена;
|
||
**в git не входит** (`.gitignore`), в клоне отсутствует.
|