From a82382f47abe355cbbab98f1c9dd8bdce4147805 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Thu, 10 Sep 2026 19:06:35 +0300 Subject: [PATCH] =?UTF-8?q?feat(mera-b2c):=20=D0=BC=D0=B8=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=82=D0=BA=D0=B0=20schema?= =?UTF-8?q?.org=20=D0=B8=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=81=D0=B0=D0=B9=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Сайт открыт для индексации 10.09.2026, но поисковику он до сих пор представлялся девятью страницами без единого структурированного факта о том, кто их публикует и что продаёт, а ссылка на него в мессенджере разворачивалась голым текстом без картинки. МИКРОРАЗМЕТКА. Конструкторы узлов вынесены в `_lib/schema.ts` — чистый модуль без React, по образцу соседнего `_lib/analytics.ts`. Все значения берутся из `content.ts`, ни одной строки не продублировано: - `Organization` + `WebSite` одним `@graph` в layout поддерева, то есть на всех девяти страницах сразу. Остальные узлы ссылаются на организацию через `@id`, а не повторяют реквизиты у себя. - `Service` с `Offer` на лэндинге. - `FAQPage` в блоке возражений. - `BreadcrumbList` на статьях, статье, документах и странице для бизнеса — ровно по тем крошкам, что видны на экране. - Существующий `Article` переведён на ссылку `publisher: { "@id": ... }`. РАЗМЕТКА НЕ ОБЕЩАЕТ ТОГО, ЧЕГО НЕТ. Два места, где это стоило внимания: - `Offer.availability` вычисляется из `PUBLIC_ESTIMATE_ENABLED`. Флаг сейчас `false` (платёжного контура в коде нет), поэтому в разметку уходит `PreOrder`, а не `InStock`: цена опубликована, купить нельзя, и врать об этом поисковику нечего. Включится приём оплаты — значение сменится само. - `FAQPage` строится из того же массива `ITEMS`, который рисует `
`, а не из `FAQ` напрямую: в `ITEMS` часть вопросов заменена макетными формулировками, и разметка от сырого `FAQ` разошлась бы с видимым текстом молча. Выдуманных дат, рейтингов и отзывов не добавлено нигде. КАРТИНКИ. Две штуки, и это не дубль: `og-mera.png` 1200×630 — превью ссылки, `logo-mera.png` 512×512 — логотип организации в разметке, который поисковик обрезает близко к квадрату и где баннер превратился бы в обрезок надписи. Исходники обеих лежат рядом в `scripts/og/*.html` вместе с командой перерисовки: картинка должна оставаться правимой, а не только переоткрываемой в графическом редакторе. Готовые PNG, а не `opengraph-image.tsx`: satori внутри `ImageResponse` рисует только переданными ему байтами шрифта и кириллицу по умолчанию не покрывает, плюс не видит ни CSS Modules, ни наших `--b2c-*`. Разбор — в шапке `scripts/og/og-mera.html`. `images` продублирован в `twitter`: Next не переносит их из `openGraph`, когда метаданные заданы объектом, и карточка обещала бы крупное превью без картинки. ПЕРИМЕТР. Обе картинки лежат в `public/` и раздаются Next'ом по basePath-корню, куда rewrite `@meraPages` не достаёт, — отсюда два отдельных `handle` по образцу robots.txt. Оба названы в `ROOT_HANDLES_ALLOWED`, иначе двусторонний гейт периметра покраснел бы, и это правильно: корневой `handle` — вторая дверь в тот же периметр. Смоук проверяет не только 200, но и Content-Type: перепутанный rewrite отдаёт 200 с HTML, обходчик мессенджера молча его отбрасывает, и по логам приложения этого не видно — запрос туда не доходит. Проверено: tsc, eslint, 215 тестов mera-public, изоляция B2C-дерева, caddy validate, bash -n смоука, прод-сборка с basePath и разбор отрендеренного HTML — JSON-LD парсится, og:image и twitter:image на месте. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01CiUFZ3rmTNpp3DRajUo8KQ --- caddy/sites/apps.caddy | 30 ++ scripts/smoke-mera-perimeter.sh | 30 ++ tradein-mvp/frontend/public/logo-mera.png | Bin 0 -> 8686 bytes tradein-mvp/frontend/public/og-mera.png | Bin 0 -> 54730 bytes .../frontend/scripts/og/logo-mera.html | 87 ++++++ tradein-mvp/frontend/scripts/og/og-mera.html | 264 ++++++++++++++++++ .../__tests__/public-perimeter.test.ts | 15 +- .../app/mera-public/_components/JsonLd.tsx | 18 ++ .../_components/v3/ObjectionsV3.tsx | 14 + .../src/app/mera-public/_lib/schema.ts | 149 ++++++++++ .../articles/kak-ocenit-kvartiru/page.tsx | 23 +- .../src/app/mera-public/articles/page.tsx | 11 + .../src/app/mera-public/business/page.tsx | 11 + .../frontend/src/app/mera-public/content.ts | 33 +++ .../src/app/mera-public/docs/page.tsx | 11 + .../frontend/src/app/mera-public/layout.tsx | 54 +++- .../frontend/src/app/mera-public/page.tsx | 26 ++ 17 files changed, 764 insertions(+), 12 deletions(-) create mode 100644 tradein-mvp/frontend/public/logo-mera.png create mode 100644 tradein-mvp/frontend/public/og-mera.png create mode 100644 tradein-mvp/frontend/scripts/og/logo-mera.html create mode 100644 tradein-mvp/frontend/scripts/og/og-mera.html create mode 100644 tradein-mvp/frontend/src/app/mera-public/_components/JsonLd.tsx create mode 100644 tradein-mvp/frontend/src/app/mera-public/_lib/schema.ts diff --git a/caddy/sites/apps.caddy b/caddy/sites/apps.caddy index b8110feb..b01dbdea 100644 --- a/caddy/sites/apps.caddy +++ b/caddy/sites/apps.caddy @@ -598,6 +598,36 @@ meraocenka.ru { } } + # og-mera.png — картинка превью ссылок (og:image). Её просят НЕ браузеры + # посетителей, а обходчики мессенджеров и соцсетей (Telegram, VK, + # WhatsApp), причём анонимно и без Referer: если путь не открыт, ссылка на + # сайт разворачивается без картинки, и понять это по логам приложения + # нельзя — запрос просто не доходит. + # + # Отдельный handle по той же причине, что у robots.txt: файл лежит в + # `public/` фронта и раздаётся Next'ом по basePath-корню + # (/trade-in/og-mera.png), а не под /trade-in/mera-public{path}, куда + # рерайтит @meraPages. Адрес намеренно короткий: он попадает в разметку + # каждой публичной страницы и расходится по чужим кэшам, так что менять + # его потом дорого. + handle /og-mera.png { + rewrite * /trade-in/og-mera.png + reverse_proxy tradein-frontend:3000 { + header_up -X-Authenticated-User + } + } + + # logo-mera.png — логотип организации из микроразметки (Organization.logo). + # Отдельный файл от og-mera.png выше: превью ссылки широкое, а логотип + # поисковик обрезает близко к квадрату. Свой handle по той же причине — + # файл лежит в `public/` и раздаётся по basePath-корню. + handle /logo-mera.png { + rewrite * /trade-in/logo-mera.png + reverse_proxy tradein-frontend:3000 { + header_up -X-Authenticated-User + } + } + # Публичный API МЕРЫ — ЕДИНСТВЕННЫЙ путь этого домена, доходящий до # бэкенда. Под /api/public/ по определению не лежит ничего закрытого: # гарантию даёт структура пакета app/api/public/, а не аккуратность этого diff --git a/scripts/smoke-mera-perimeter.sh b/scripts/smoke-mera-perimeter.sh index 2df297be..867b5f45 100644 --- a/scripts/smoke-mera-perimeter.sh +++ b/scripts/smoke-mera-perimeter.sh @@ -125,6 +125,28 @@ check_redirect_location() { esac } +# check_content_type: 200 И заявленный Content-Type начинается с ожидаемого. +# +# Заведён под og:image. Для картинки превью «200» само по себе ничего не +# доказывает: перепутанный rewrite приводит к 200 с HTML-страницей фронта, и +# обходчик мессенджера её молча отбросит — ссылка развернётся без картинки, а +# смоук останется зелёным. Проверять надо ровно то, ради чего адрес открыт. +check_content_type() { + local desc="$1" url="$2" expected_prefix="$3" + local out code ctype + out=$(curl -s -o /dev/null -D - -w '%{http_code}' --max-time 15 "$url" 2>/dev/null) + code=${out##*$' +'} + ctype=$(printf '%s' "$out" | grep -i '^content-type:' | tr -d ' +' | sed 's/^[Cc]ontent-[Tt]ype: *//' | head -1) + if [ "$code" = "200" ] && [ "${ctype#"$expected_prefix"}" != "$ctype" ]; then + echo "PASS: $desc ($url -> $code, $ctype)" + else + echo "FAIL: $desc ($url -> got '${code:-}' / '${ctype:-}', expected 200 + $expected_prefix)" + fail=1 + fi +} + echo "== МЕРА B2C perimeter smoke (ЭТАП 1) ==" # 1. Публичный домен отдаёт 200 анонимно. @@ -164,6 +186,14 @@ check "meraocenka.ru/business — public 200" "$BASE_MERA/business" 200 check "meraocenka.ru/robots.txt — public 200" "$BASE_MERA/robots.txt" 200 check "meraocenka.ru/sitemap.xml — public 200" "$BASE_MERA/sitemap.xml" 200 +# 1d4. og:image — картинка превью ссылок. Её просят обходчики мессенджеров и +# соцсетей, анонимно и без Referer; отвалится handle — ссылки на сайт +# начнут разворачиваться без картинки, и заметить это по логам +# приложения нельзя (запрос туда просто не доходит). Content-Type +# проверяется вместе с кодом: 200 с HTML вместо PNG выглядел бы так же. +check_content_type "meraocenka.ru/og-mera.png — public 200 + image/png" "$BASE_MERA/og-mera.png" "image/png" +check_content_type "meraocenka.ru/logo-mera.png — public 200 + image/png" "$BASE_MERA/logo-mera.png" "image/png" + # 1e. Длинные адреса поддерева отдают 301 на короткие: у страницы один # канонический адрес, а старые ссылки и закладки продолжают работать. # ГОЛЫЙ /trade-in/mera-public — регресс на баг 15.08.2026: прежний матчер diff --git a/tradein-mvp/frontend/public/logo-mera.png b/tradein-mvp/frontend/public/logo-mera.png new file mode 100644 index 0000000000000000000000000000000000000000..687851683f664ce72ba4221185879687b3344851 GIT binary patch literal 8686 zcmeHNXH-*Nm%hQ!5h)_lQC~o$DF}!W0#X$zf+9+nUK2rDAS8l-ihzoAX`+DAK?G@` zcPWP6qV&*0NhpCN6KB@9=KuWpX4aZtx2(O+*>~@Kp69t|pO>b_`X|{0*#H1IdCNe@ z3;-DDw+sNw-%E&~b};~O0k?Ft?gf2VpJ5HXKa$b3&D$kvAP!-DUIu2dvgFy*wczH5 z=M?Zc-!;|$@F>6k_5B!&{M_Q)(b3w|e2I@V!aQ`H^_`?NS)NOPdEUsKV+ZpXhzq6i znq7H5ou0g)9<)zE;o`;02qJTab~PBkfd+!@eoxPBM&M0;Dg*FB2LLoL(%reqP50#$ z0H9650Py@g0EnLk0YDB50I=x(zsdiSxcrdGF85VPlJD(3>^g$=JfI*;chuv<%&kbqZ7``hYaONP?dfB%4(WNF8Fracv z?i#I5J=(%0!wl}jdpu(3m(-(7K0ZOc-0gxa`_0QB(JW;&+b*Y6h{@2!b@d z^<(5;+f{9Nx&M%hh^W6IsTUO&!{W2HHq(RErkN0yLhGmR%3D}pw=oOI`*yXm#>v@Y z_8o69Sv*z_RaTYX+4JPY$K!fF(-WYk`~8Xcrz;RvH8<$@4W*|Qha zxx#_$p49}GA(0PWKZ=&zoXWoubwL;zy>JKGtjosNupQ!_#|lQ;;3e&igQ&QDnSsTavCZ8!!%l8jM%M0pns%2({>>Ah+&Z02q&J|1QM13QXEYQl_faR|*?0X5(jfr00b{F}`x|f>H(+wTn^BBJudm3k&p>^Sc7iArBsk=S+jcYaq zK#Vw0_BvdVUAEL}PM2YXZk#*JCiU>q-v_#{|J&HjGRjp+b&)8$eg2sT7)at?-T3?= zQ^NKi(^#NM5%Jw4=f9uys#z_J2Y3{C3iJSbfk3^;DxzD-2g|bLPMf=b*vjZiqIYW_ zj;gTw=KI*BLk|-C5uL^Y6fKmOY%oWDGc$JAgg5o|Z=ALl0Rt9uLwy^i+6Z0p^_f%^ zZVg+pld-$Mg-tElK}| z12yZL1@Ht{F{5d}yl;1!&l@McS5K-Lb84FDXo$W@M|?7vtY5u#1))M`MsnT^Is0Qc z77N3k5DG{Q1s64BnG9IS@o56^_GzCX$pOiw3}o1t7M(kA-OK??{AnCPwffAA)_TB} z!hYb3l_i3!qJ0?oC2q6d6#iHt?~}r{_wI_>`h{oAbEhu;R;<3gx3-=8UTL|bbkaq` zMaS}Yv^JueUfsX%(7E@{RE?+M?8AgBKc|Q3w2UaHMu?R&qqEwoeAMa;A-h-Taf?>K z?X(YhNpc$B#BigazP>9JKbNdf8$k3&VSg=cGZ2odoP)LaY^z!hOIY^nVTF&90Hh)rv^c+sWSvP%r zaIaqy_`BLsrb3;7Y4kxhx|-?f12`*6a6FDYwC9k_AVG4#vVMh>9%)}OlGJ3Dry)4&3F-M4-CV+%gI zcEq_1&kxE!y*d9^;Oqy!h6g&%pGxNfuHKpW+*75N&o9>dFex>#vHs>CJx}~l=uMrj zPX%Rn|7dxUhs41^Z1s(`;bi^Fcs`qpmrAeMS(Km_-=EWG--3_H9LdSkzCH+%)Q>cI z!D6AA%k}pU<5W24|J*OeCRfzy%gCq*14QfJ-d#pj`ywK)z$UOLR@!W z?!TTzS)7(~xpB>C!et}sq#x=~Y_&G%h(?8DxBiegWiH8w?cnXa4R4znof)fq0EfS! zCflkbh%eV>stoV2L!pb8mk7O89kHU6Ng0fPpliA~3+#JjVp5{0nlG`XJ;q<-DESnX zyeWpO=R{>;?5e425{9vvayJ5vC)Vd8V;(+~8u8DeS$*fAYyG~TKdX8RYxiQFM@Rll zqy8Qa*^GPr!gMd-_~2!gkjj}+WoQAmf=?zZ^mu4xZ-cMRp0&#vS@(3J-$uHpnRs=V zawvA`>g@pIewk8gV_-{ms-I|O$l-S%oX^pyUGLA{Db#Ot_&?w#=fuRshW$VKi;Igr zZ;3>d-<(Bc-oxXKca0IzjjFWPSFhNdPmz&!bzu=6*%G}LE9#<*S6I+8enevci-P=0 zUw5@j*)Md>QhJ2-e8ZcXYE`XzP@}ukZ*%C{fANJDV4a#9$dE#vnh75`L*3uS48cBl zq%GJ;BW~#{4?ZIj)sOb1|C)W651^Yty7Ey+)?!Vt9<$ffO3%>}^Vo_f*fW2pjPaZP zJ7s6^21zwwefqPY3}N`oCz0;2cZpMoJ+Eis9N;FB+G8m+9;1zK1xhibPCYRW10zF2 z=u-pbo@Wuv@xqX=;wM0GWZXEbJ(=KE*l3kd2Yp(ABI)e~U z7LpnmvH`wKfqg@x(Jxiw?T*_&Dx3*hB@kd5LG51»ROt%NR#;Z}7ZnXP8PWAD) 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 literal 0 HcmV?d00001 diff --git a/tradein-mvp/frontend/public/og-mera.png b/tradein-mvp/frontend/public/og-mera.png new file mode 100644 index 0000000000000000000000000000000000000000..c03621ff49266846602d9c88707394f45bd0d3b7 GIT binary patch literal 54730 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 literal 0 HcmV?d00001 diff --git a/tradein-mvp/frontend/scripts/og/logo-mera.html b/tradein-mvp/frontend/scripts/og/logo-mera.html new file mode 100644 index 00000000..67e03e19 --- /dev/null +++ b/tradein-mvp/frontend/scripts/og/logo-mera.html @@ -0,0 +1,87 @@ + + + + +Логотип МЕРА для микроразметки + + + + + + + +
+
+
МЕРА
+
ДЛЯ СЕБЯ
+
+ + diff --git a/tradein-mvp/frontend/scripts/og/og-mera.html b/tradein-mvp/frontend/scripts/og/og-mera.html new file mode 100644 index 00000000..867d2b01 --- /dev/null +++ b/tradein-mvp/frontend/scripts/og/og-mera.html @@ -0,0 +1,264 @@ + + + + +OG-карточка МЕРА + + + + + + + +
+ + +
+ +
Реальная цена вашей квартиры — чтобы не продешевить
+
Сделки Росреестра и объявления площадок — по вашему адресу.
+
+ +
+
ДИАПАЗОН ЦЕНЫ
+
+
+
+
+
нижевыше
+ +
Вилка, а не одно число: рядом видно, на скольких объектах она построена.
+
+ +
+
СВЕРДЛОВСКАЯ ОБЛАСТЬ
+
meraocenka.ru
+
+
+ + diff --git a/tradein-mvp/frontend/src/app/mera-public/__tests__/public-perimeter.test.ts b/tradein-mvp/frontend/src/app/mera-public/__tests__/public-perimeter.test.ts index 65e2ee83..d732f9a3 100644 --- a/tradein-mvp/frontend/src/app/mera-public/__tests__/public-perimeter.test.ts +++ b/tradein-mvp/frontend/src/app/mera-public/__tests__/public-perimeter.test.ts @@ -183,7 +183,20 @@ describe("короткие адреса публичного домена", () = * `/trade-in/...`-хопы — это внутренняя проводка basePath, а не публичная * поверхность, у них своя проверка ниже (B2B-пути обязаны отдавать 404). */ - const ROOT_HANDLES_ALLOWED = ["/metrics", "/favicon.ico", "/robots.txt"]; + const ROOT_HANDLES_ALLOWED = [ + "/metrics", + "/favicon.ico", + "/robots.txt", + // Картинка превью ссылок (og:image), 10.09.2026. Её просят обходчики + // мессенджеров и соцсетей, а не посетители; файл лежит в `public/` фронта + // и раздаётся по basePath-корню, поэтому rewrite @meraPages его не + // обслуживает — отсюда свой handle, как у robots.txt. + "/og-mera.png", + // Логотип организации из микроразметки (Organization.logo), 10.09.2026. + // Отдельный файл от превью: оно широкое, логотип поисковик обрезает + // близко к квадрату. Раздаётся так же — из `public/`, своим handle. + "/logo-mera.png", + ]; it("корневые handle публичного домена — только объявленные", () => { const declared = [...meraBlock.matchAll(/^\s*handle\s+(\/[^\s*{]+)\s*\{/gm)] diff --git a/tradein-mvp/frontend/src/app/mera-public/_components/JsonLd.tsx b/tradein-mvp/frontend/src/app/mera-public/_components/JsonLd.tsx new file mode 100644 index 00000000..89773dc5 --- /dev/null +++ b/tradein-mvp/frontend/src/app/mera-public/_components/JsonLd.tsx @@ -0,0 +1,18 @@ +/** + * JsonLd — серверный компонент, печатающий один узел/граф schema.org в + * `