From 31ace359d7ff187cbe9ba968facc498e75e66b3d Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Wed, 7 Oct 2026 20:07:03 +0500 Subject: [PATCH] feat: add og description\image\etc --- docs/backlog.md | 10 +++- web/package.json | 1 + web/scripts/gen-og.mjs | 56 +++++++++++++++++++++++ web/src/lib/components/Seo.svelte | 30 ++++++++++++ web/src/lib/seo.ts | 6 +++ web/src/routes/+page.svelte | 5 +- web/src/routes/list-tools/+page.svelte | 10 ++-- web/src/routes/tools/[slug]/+page.svelte | 13 +++++- web/static/og/default.png | Bin 0 -> 33836 bytes 9 files changed, 122 insertions(+), 9 deletions(-) create mode 100644 web/scripts/gen-og.mjs create mode 100644 web/src/lib/components/Seo.svelte create mode 100644 web/src/lib/seo.ts create mode 100644 web/static/og/default.png diff --git a/docs/backlog.md b/docs/backlog.md index e216f61..22258a1 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -227,7 +227,15 @@ переименований уже опубликованных страниц; клонов с canonical не делать (`docs/plan-seo.md` §5) - [ ] sitemap.xml из реестра + `Sitemap:` в robots.txt (S1b/S1c) -- [ ] Seo.svelte: canonical + OG-теги, per-tool OG-картинки (S1d/S1e) +- [ ] Seo.svelte: per-tool OG-картинки (S1e) — у каждой страницы инструмента + своя превью-карточка 1200×630 для соцсетей/мессенджеров: имя инструмента, + бренд, иконка. Сейчас все страницы ссылаются на общую + `static/og/default.png` (генерирует `pnpm --dir web gen:og` — + Playwright-скриншот HTML-карточки в `web/scripts/gen-og.mjs`). Что делать: + расширить gen-og.mjs — проход по реестру страниц, карточка с названием + инструмента в `static/og/[slug].png`, в `Seo.svelte` подставлять og-URL по + slug страницы. Критерий приёмки: у `/tools/flip-png` в og:image своя + картинка с названием инструмента, файл лежит в `static/og/` - [ ] контент страницы инструмента: seo-блок в словарях, how-to/FAQ/related (S2) - [ ] JSON-LD (SoftwareApplication/FAQPage/Breadcrumb) + llms.txt (S3) - [ ] дистрибуция: закрепить репо, alternative.to, Product Hunt, Reddit/HN (S4c) diff --git a/web/package.json b/web/package.json index 65e9f05..60a5d43 100644 --- a/web/package.json +++ b/web/package.json @@ -14,6 +14,7 @@ "test:coverage": "vitest run --coverage", "test:rules": "vitest run eslint-plugins/__tests__", "test:e2e": "playwright test", + "gen:og": "node scripts/gen-og.mjs", "format": "prettier --write . --log-level warn --cache", "format:check": "prettier --check . --log-level warn --cache", "lint": "eslint .", diff --git a/web/scripts/gen-og.mjs b/web/scripts/gen-og.mjs new file mode 100644 index 0000000..0f7c77d --- /dev/null +++ b/web/scripts/gen-og.mjs @@ -0,0 +1,56 @@ +// Генерирует static/og/default.png — дефолтная OG-карточка 1200×630. +// Запуск: pnpm --dir web gen:og. Карточка рисуется в браузере (текст, иконки), +// per-tool карточки — этим же harness позже (docs/plan-seo.md S1e). +import { mkdirSync } from "node:fs"; +import { chromium } from "playwright"; + +const W = 1200; +const H = 630; + +const IMAGE_ICON = ``; + +function cardHtml() { + return ` +
+
+
EP
+
easy-png-tools
+
PNG utilities right in your browser
+
Convert · Crop · Resize — locally, no uploads
+
+
${IMAGE_ICON}
+
+`; +} + +mkdirSync(new URL("../static/og/", import.meta.url), { recursive: true }); + +const browser = await chromium.launch(); +try { + const page = await browser.newPage({ viewport: { width: W, height: H } }); + await page.setContent(cardHtml()); + await page.screenshot({ + path: new URL("../static/og/default.png", import.meta.url).pathname.replace( + /^\/([A-Za-z]:)/, + "$1", + ), + }); + console.log(`og/default.png written (${W}x${H})`); +} finally { + await browser.close(); +} diff --git a/web/src/lib/components/Seo.svelte b/web/src/lib/components/Seo.svelte new file mode 100644 index 0000000..c32443a --- /dev/null +++ b/web/src/lib/components/Seo.svelte @@ -0,0 +1,30 @@ + + + + {title} + + + + + + + + + + + + + diff --git a/web/src/lib/seo.ts b/web/src/lib/seo.ts new file mode 100644 index 0000000..24c40f9 --- /dev/null +++ b/web/src/lib/seo.ts @@ -0,0 +1,6 @@ +/** + * Публичный URL сайта для canonical/OG (абсолютные URL, включая base-path + * GitHub Pages). После покупки домена меняется здесь — `docs/plan-seo.md` §6. + * Внимание: `$app/paths.base` для этого не подходит — он относительный. + */ +export const SITE_URL = "https://ku6epxboctuk.github.io/easy-png-tools"; diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 2ac2ae3..8362a9c 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -4,6 +4,7 @@ import CatalogHeader from "$lib/components/catalog/CatalogHeader.svelte"; import CatalogToolbar from "$lib/components/catalog/CatalogToolbar.svelte"; import ToolCard from "$lib/components/catalog/ToolCard.svelte"; + import Seo from "$lib/components/Seo.svelte"; import { favFirst, isFav } from "$lib/favorites.svelte"; import { pageDescription, @@ -37,9 +38,7 @@ ); - - {t("home.defaultTitle")} - +
diff --git a/web/src/routes/list-tools/+page.svelte b/web/src/routes/list-tools/+page.svelte index 0efd849..9bfd823 100644 --- a/web/src/routes/list-tools/+page.svelte +++ b/web/src/routes/list-tools/+page.svelte @@ -4,6 +4,7 @@ import CatalogHeader from "$lib/components/catalog/CatalogHeader.svelte"; import CatalogToolbar from "$lib/components/catalog/CatalogToolbar.svelte"; import ToolCard from "$lib/components/catalog/ToolCard.svelte"; + import Seo from "$lib/components/Seo.svelte"; import { favFirst, isFav } from "$lib/favorites.svelte"; import { pageDescription, @@ -37,10 +38,11 @@ ); - - {t("catalog.pageTitle")} - - +
diff --git a/web/src/routes/tools/[slug]/+page.svelte b/web/src/routes/tools/[slug]/+page.svelte index 86f5a72..546bcb1 100644 --- a/web/src/routes/tools/[slug]/+page.svelte +++ b/web/src/routes/tools/[slug]/+page.svelte @@ -1,6 +1,8 @@ +{#if page} + +{/if} - easy-png-tools / {page?.title ?? t("toolPage.fallbackTitle")} + {#if !page} + easy-png-tools / {t("toolPage.fallbackTitle")} + {/if} diff --git a/web/static/og/default.png b/web/static/og/default.png new file mode 100644 index 0000000000000000000000000000000000000000..af1cd53f6b518bfbd228476492d20ec7f8dd37d8 GIT binary patch literal 33836 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 UI8FIk{Pj+yx9V@;uit