mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
docs: update to slug - id changes
This commit is contained in:
+35
-29
@@ -1,11 +1,11 @@
|
||||
# План: SEO + GEO — индексация и конкуренция в image tools
|
||||
|
||||
> **Статус: active.** Адреса страниц инструментов — `/tools/<id>` (`crop-png` и
|
||||
> подобные), каталог — `/list-tools`; отдельного поля `slug` в реестре пока нет,
|
||||
> `id` и есть адрес.
|
||||
> **Статус: active.** Адреса страниц инструментов — `/tools/<slug>` (`crop-png`
|
||||
> и подобные), каталог — `/list-tools`; реестр двухслойный: страница `slug`
|
||||
> ссылается на инструмент по `id` (`docs/architecture.md`, раздел 3).
|
||||
>
|
||||
> **`noindex, nofollow` выставлен на каждой странице инструмента**
|
||||
> (`web/src/routes/tools/[id]/+page.svelte`) — осознанно, до появления
|
||||
> (`web/src/routes/tools/[slug]/+page.svelte`) — осознанно, до появления
|
||||
> уникального контента (S2). Пока он стоит, сайт не индексируется вообще, и
|
||||
> **S1b–S1e (sitemap, `robots.txt` с `Sitemap:`, canonical, OG) не дают
|
||||
> эффекта**: их имеет смысл делать вместе со снятием `noindex`, а не вместо
|
||||
@@ -40,22 +40,24 @@
|
||||
- **Форматы: формат = выбор в UI, не отдельные страницы.** Download-кнопка
|
||||
каждого инструмента — с селектором PNG/JPG/WebP/BMP (+quality для lossy). Райз
|
||||
«выбор формата/качества в Download» вытащен из backlog №7 в S1f: механика уже
|
||||
есть (`ToolEntry.output`), нужна как продуктовая основа «image
|
||||
есть (`Tool.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` и адрес страницы».
|
||||
`crop-png`); png-интент держат адрес страницы и имя скачиваемого файла.
|
||||
**Реализовано:** реестр разделён на инструменты (`registry/tools/`, уникальный
|
||||
`id`) и страницы (`registry/pages/`, уникальный `slug`), роут —
|
||||
`tools/[slug]/`; модель — `docs/architecture.md`, раздел 3. **Следствие для
|
||||
SEO: редиректы не понадобились, canonical и sitemap не меняются, адреса те
|
||||
же** — поэтому это была безопасная правка до индексации, а не после. Побочная
|
||||
выгода: широкие интенты («crop image online») переносятся теми же страницами
|
||||
контентом — H1 «Crop image», текст «works with PNG, JPG, WebP»; URL-алиасы без
|
||||
`-png` по-прежнему не создаются (канонический беспорядок). Побочный эффект
|
||||
модели: страница может ссылаться на один инструмент, а инструмент —
|
||||
обслуживать много страниц, поэтому следующие шаги (свести convert-страницы на
|
||||
один `convert`, селектор формата в Download — S1f) не требуют новой миграции
|
||||
реестра. Задача на консолидацию — `docs/backlog.md`.
|
||||
- **Индексируемая локаль — EN** (базовая; конкурент англоязычный). RU-версия —
|
||||
отдельно и позже: префикс `/ru/`, prerender обеих локалей, hreflang
|
||||
(сознательно отложено). Пока язык переключается на клиенте (localStorage) —
|
||||
@@ -65,11 +67,11 @@
|
||||
canonical и «корневость» страниц. Свой домен + корень. Текущий деплой — GitHub
|
||||
Pages (`.github/workflows/deploy.yml`); перенос на свой домен выполняется
|
||||
сменой origin в CI и `PUBLIC_SITE_ORIGIN`.
|
||||
- **URL-схема инструментов:** короткие плоские адреса — `/tools/<id>` для
|
||||
инструмента, `/list-tools` для каталога, где `<id>` берётся из записи реестра.
|
||||
Схему не менять без отдельного SEO-плана: после индексации переименование URL
|
||||
означает 301 и потерю позиций. Разделение `id`/`slug` (решение выше) адресов
|
||||
не меняет.
|
||||
- **URL-схема инструментов:** короткие плоские адреса — `/tools/<slug>` для
|
||||
страницы, `/list-tools` для каталога, где `<slug>` берётся из записи
|
||||
`registry/pages/`. Схему не менять без отдельного SEO-плана: после индексации
|
||||
переименование URL означает 301 и потерю позиций. Разделение инструмента и
|
||||
страницы (решение выше) адресов не меняет.
|
||||
- **Без GA и рекламных скриптов:** аналитика — self-hosted Plausible/Umami или
|
||||
Cloudflare Web Analytics. «No tracking» — часть позиционирования, её нельзя
|
||||
подрывать собственными скриптами.
|
||||
@@ -83,9 +85,10 @@
|
||||
- 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`.
|
||||
- Страницы в `web/src/lib/registry/pages` со «SEO-шными» slug (`crop-png`,
|
||||
`add-border-png`, …) — URL уже повторяют паттерн конкурента, при этом
|
||||
внутренние имена инструментов png-интента не держат. Актуальный состав:
|
||||
`docs/tools-map.md`.
|
||||
- На корневых страницах инструментов есть базовые `<title>` и `robots`; полный
|
||||
SEO-слой (canonical, OG, content и JSON-LD) остаётся S1/S2.
|
||||
- Каталог со ссылками на все инструменты (внутренняя перелинковка) и карта
|
||||
@@ -160,7 +163,7 @@
|
||||
**domain-required** (после покупки и DNS-настройки).
|
||||
|
||||
- [ ] **[S1h]** Снять `noindex, nofollow` со страниц инструментов
|
||||
(`web/src/routes/tools/[id]/+page.svelte`) — заменить на
|
||||
(`web/src/routes/tools/[slug]/+page.svelte`) — заменить на
|
||||
`<meta name="robots" content="index, follow" />`. **Это первым
|
||||
обязательным шагом S1:** пока тег стоит, остальные задачи S1 готовят
|
||||
инфраструктуру, но не приводят трафик. Порядок: S1h ставится после
|
||||
@@ -172,14 +175,16 @@
|
||||
|
||||
- [ ] **[S1e]** OG-картинки per-tool: генерация PNG-карточек скриптом на
|
||||
существующем ядре (мы сами умеем рисовать PNG) — имя инструмента + бренд,
|
||||
файл `static/og/[id].png`, ссылка из `Seo.svelte`. Относительные пути
|
||||
файл `static/og/[slug].png`, ссылка из `Seo.svelte`. Относительные пути
|
||||
(`/og/crop-png.png`) работают без домена; при деплое на собственном домене
|
||||
OG-картинки будут абсолютными и корректными.
|
||||
- [ ] **[S1f]** Download-кнопка с селектором формата PNG/JPG/WebP/BMP (+quality
|
||||
для lossy) для всех инструментов — механика `ToolEntry.output` уже есть
|
||||
для lossy) для всех инструментов — механика `Tool.output` уже есть
|
||||
(`docs/backlog.md`, «Идеи» №6, UX-райз «Download»). Продуктовая основа
|
||||
«image tools»-позиционирования: без неё сайт остаётся PNG-сайтом. Вести
|
||||
параллельно с текущими quality-задачами.
|
||||
параллельно с текущими quality-задачами. Побочно снимает `quality` из схем
|
||||
страниц — после этого 14 convert-страниц сводятся на один инструмент
|
||||
(`docs/backlog.md`).
|
||||
- [ ] **[S1g]** Поведение конвертеров после S1f: не предлагать в меню форматов
|
||||
формат исходника (disable) — чтобы `convert-png-to-jpg` не мог сохранить в
|
||||
png. Существующие страницы не трогать: `convert-png-to-jpg`,
|
||||
@@ -350,7 +355,8 @@ with PNG, JPG, WebP» в тексте + селектор формата в Downl
|
||||
**один будущий инструмент `/convert-image`**: сначала пустой **core-tool** в
|
||||
`core/` — функция ре-энкода («копия с перекодированием»: декодирует любой
|
||||
поддержанный исходник в ImageData и кодирует в выбранный формат; поверх неё
|
||||
S1f строит селектор формата). `ToolEntry` и страницу добавлять **только вместе
|
||||
S1f строит селектор формата). Инструмент и страницу добавлять **только вместе
|
||||
|
||||
с собственным текстом** («Convert any image to PNG, JPG or WebP in your
|
||||
browser») — core в коде не обязывает к странице. Этот же шаблон потом
|
||||
закрывает форматные волны (jpg→webp и т.п.) без новых страниц.
|
||||
|
||||
Reference in New Issue
Block a user