dsh-desktop-kit 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +87 -2
- package/client.js +3349 -0
- package/cordis.patch.yml +5 -0
- package/index.js +80 -0
- package/package.json +60 -4
- package/plugins/dsh-gkb-ru-ui/cordis.patch.yml +6 -0
- package/plugins/dsh-gkb-ru-ui/lib/client.js +1083 -0
- package/plugins/dsh-gkb-ru-ui/lib/index.js +142 -0
- package/plugins/dsh-gkb-ru-ui/lib/skills.js +376 -0
- package/plugins/dsh-gkb-ru-ui/package.json +28 -0
- package/plugins/dsh-peak-guard/README.md +70 -0
- package/plugins/dsh-peak-guard/client.js +741 -0
- package/plugins/dsh-peak-guard/cordis.patch.yml +5 -0
- package/plugins/dsh-peak-guard/icon.svg +12 -0
- package/plugins/dsh-peak-guard/index.js +2 -0
- package/plugins/dsh-peak-guard/locale/en.json +6 -0
- package/plugins/dsh-peak-guard/locale/ru.json +6 -0
- package/plugins/dsh-peak-guard/locale/zh.json +6 -0
- package/plugins/dsh-peak-guard/package.json +33 -0
- package/plugins/dsh-profile-transfer/README.md +62 -0
- package/plugins/dsh-profile-transfer/bootstrap/01-INSTALL.cmd +7 -0
- package/plugins/dsh-profile-transfer/bootstrap/README-ARCHIVE.md +54 -0
- package/plugins/dsh-profile-transfer/bootstrap/README-/320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/232/320/220.md +42 -0
- package/plugins/dsh-profile-transfer/bootstrap/install-on-clean-machine.ps1 +119 -0
- package/plugins/dsh-profile-transfer/bootstrap//320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/230/320/242/320/254.cmd +5 -0
- package/plugins/dsh-profile-transfer/client.js +806 -0
- package/plugins/dsh-profile-transfer/cordis.patch.yml +3 -0
- package/plugins/dsh-profile-transfer/icon.svg +13 -0
- package/plugins/dsh-profile-transfer/index.js +375 -0
- package/plugins/dsh-profile-transfer/locale/en.json +6 -0
- package/plugins/dsh-profile-transfer/locale/ru.json +6 -0
- package/plugins/dsh-profile-transfer/locale/zh.json +6 -0
- package/plugins/dsh-profile-transfer/package.json +36 -0
- package/plugins/dsh-profile-transfer/transfer.js +1004 -0
- package/plugins/dsh-project-memory/README.md +71 -0
- package/plugins/dsh-project-memory/cordis.patch.yml +4 -0
- package/plugins/dsh-project-memory/icon.svg +12 -0
- package/plugins/dsh-project-memory/index.js +1240 -0
- package/plugins/dsh-project-memory/locale/en.json +6 -0
- package/plugins/dsh-project-memory/locale/ru.json +6 -0
- package/plugins/dsh-project-memory/locale/zh.json +6 -0
- package/plugins/dsh-project-memory/package.json +26 -0
- package/plugins/dsh-session-move/README.md +67 -0
- package/plugins/dsh-session-move/client.js +719 -0
- package/plugins/dsh-session-move/cordis.patch.yml +5 -0
- package/plugins/dsh-session-move/icon.svg +14 -0
- package/plugins/dsh-session-move/index.js +497 -0
- package/plugins/dsh-session-move/locale/en.json +6 -0
- package/plugins/dsh-session-move/locale/ru.json +6 -0
- package/plugins/dsh-session-move/locale/zh.json +6 -0
- package/plugins/dsh-session-move/package.json +31 -0
- package/skills/code-review-checklist/SKILL.md +37 -0
- package/skills/content-writing/README.md +87 -0
- package/skills/content-writing/SKILL.md +348 -0
- package/skills/content-writing/assets/checklists/fact-check.md +53 -0
- package/skills/content-writing/assets/checklists/publish.md +65 -0
- package/skills/content-writing/assets/checklists/social.md +40 -0
- package/skills/content-writing/assets/templates/article.md +47 -0
- package/skills/content-writing/assets/templates/brief.md +44 -0
- package/skills/content-writing/assets/templates/doctor-card.md +41 -0
- package/skills/content-writing/assets/templates/image-prompts.md +128 -0
- package/skills/content-writing/assets/templates/post-telegram.md +36 -0
- package/skills/content-writing/assets/templates/post-vk.md +42 -0
- package/skills/content-writing/assets/templates/press-release.md +56 -0
- package/skills/content-writing/assets/templates/science-pop-note.md +55 -0
- package/skills/content-writing/assets/templates/service-card.md +46 -0
- package/skills/content-writing/references/anti-ai-style.md +248 -0
- package/skills/content-writing/references/editing.md +185 -0
- package/skills/content-writing/references/fact-checking.md +205 -0
- package/skills/content-writing/references/government-medical.md +246 -0
- package/skills/content-writing/references/images.md +212 -0
- package/skills/content-writing/references/journalism.md +252 -0
- package/skills/content-writing/references/science-popular.md +218 -0
- package/skills/content-writing/references/seo-content.md +172 -0
- package/skills/content-writing/references/social-media.md +253 -0
- package/skills/content-writing/references/templates.md +291 -0
- package/skills/database-safety/SKILL.md +31 -0
- package/skills/debugging-playbook/SKILL.md +39 -0
- package/skills/design-critique/SKILL.md +118 -0
- package/skills/dev-workflow/SKILL.md +41 -0
- package/skills/git-and-ci/SKILL.md +40 -0
- package/skills/pg-upgrade-verify/SKILL.md +48 -0
- package/skills/project-deep-dive/SKILL.md +170 -0
- package/skills/project-deep-dive/references/recon-commands.md +78 -0
- package/skills/project-deep-dive/references/section-templates.md +102 -0
- package/skills/project-memory-maintenance/SKILL.md +170 -0
- package/skills/project-memory-maintenance/references/journal-template.md +48 -0
- package/skills/project-memory-maintenance/references/section-rules.md +57 -0
- package/skills/release-and-deploy/SKILL.md +39 -0
- package/skills/requirements-and-planning/SKILL.md +115 -0
- package/skills/security-review/SKILL.md +36 -0
- package/skills/seo/README.md +60 -0
- package/skills/seo/SKILL.md +329 -0
- package/skills/seo/assets/README.md +66 -0
- package/skills/seo/assets/scripts/LICENSE-playwright-core.txt +202 -0
- package/skills/seo/assets/scripts/README.md +179 -0
- package/skills/seo/assets/scripts/lib/args.mjs +105 -0
- package/skills/seo/assets/scripts/lib/browser.mjs +620 -0
- package/skills/seo/assets/scripts/lib/zip.mjs +191 -0
- package/skills/seo/assets/scripts/seo-audit.mjs +1675 -0
- package/skills/seo/assets/snippets/jsonld-breadcrumb.json +30 -0
- package/skills/seo/assets/snippets/jsonld-faq.json +39 -0
- package/skills/seo/assets/snippets/jsonld-medical-clinic.json +49 -0
- package/skills/seo/assets/snippets/jsonld-medical-webpage.json +33 -0
- package/skills/seo/assets/snippets/jsonld-organization.json +74 -0
- package/skills/seo/assets/snippets/jsonld-physician.json +46 -0
- package/skills/seo/assets/snippets/meta.blade.php +61 -0
- package/skills/seo/assets/snippets/robots.txt +61 -0
- package/skills/seo/assets/snippets/sitemap-urlset-example.xml +72 -0
- package/skills/seo/assets/snippets/sitemap.xml +36 -0
- package/skills/seo/references/audit-checklist.md +305 -0
- package/skills/seo/references/content-seo.md +198 -0
- package/skills/seo/references/eeat-medical.md +217 -0
- package/skills/seo/references/measurement.md +223 -0
- package/skills/seo/references/on-page.md +209 -0
- package/skills/seo/references/stack-recipes.md +693 -0
- package/skills/seo/references/structured-data.md +485 -0
- package/skills/seo/references/technical-seo.md +294 -0
- package/skills/service-desk-conventions/SKILL.md +40 -0
- package/skills/service-desk-db-safety/SKILL.md +52 -0
- package/skills/service-desk-release/SKILL.md +43 -0
- package/skills/service-desk-testing/SKILL.md +47 -0
- package/skills/service-desk-ui/SKILL.md +33 -0
- package/skills/skills-router/SKILL.md +91 -0
- package/skills/testing-strategy/SKILL.md +37 -0
- package/skills/ui-design-system/SKILL.md +45 -0
- package/skills/web-research/SKILL.md +40 -0
- package/skills/wow-design/SKILL.md +168 -0
- package/skills/wow-design/assets/kit/README.md +195 -0
- package/skills/wow-design/assets/kit/assets/css/base.css +158 -0
- package/skills/wow-design/assets/kit/assets/css/components.css +1001 -0
- package/skills/wow-design/assets/kit/assets/css/fonts.css +73 -0
- package/skills/wow-design/assets/kit/assets/css/pages.css +737 -0
- package/skills/wow-design/assets/kit/assets/css/tokens.css +218 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-golos-text.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-lora.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-unbounded.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-700-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-700-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-italic.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/js/kit.js +550 -0
- package/skills/wow-design/assets/kit/pages/dashboard.html +539 -0
- package/skills/wow-design/assets/kit/pages/hospital.html +430 -0
- package/skills/wow-design/assets/kit/showcase.html +1164 -0
- package/skills/wow-design/assets/scripts/LICENSE-axe-core.txt +362 -0
- package/skills/wow-design/assets/scripts/LICENSE-playwright-core.txt +202 -0
- package/skills/wow-design/assets/scripts/README.md +312 -0
- package/skills/wow-design/assets/scripts/audit.mjs +1200 -0
- package/skills/wow-design/assets/scripts/capture.mjs +337 -0
- package/skills/wow-design/assets/scripts/package.json +30 -0
- package/skills/wow-design/references/anti-patterns.md +249 -0
- package/skills/wow-design/references/critique-rubric.md +259 -0
- package/skills/wow-design/references/design-brief-template.md +46 -0
- package/skills/wow-design/references/inspiration.md +200 -0
- package/skills/wow-design/references/presets.md +96 -0
- package/skills/wow-design/references/principles.md +368 -0
- package/skills/wow-design/references/stack-recipes.md +93 -0
- package/skills/wow-design/references/visual-qa.md +79 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# On-page SEO — как писать и верстать страницу
|
|
2
|
+
|
|
3
|
+
> On-page решает, **поймут ли поисковик и человек, о чём страница, и кликнут ли по сниппету**.
|
|
4
|
+
> Здесь — правила с числами и примерами на русском, для медицины. Проверено 04.11.2026.
|
|
5
|
+
|
|
6
|
+
## 1. `title` — главный сигнал и главный текст сниппета
|
|
7
|
+
|
|
8
|
+
**Формат:** `{что} + {где/уточнение} + {выгода/факт} | {бренд}`
|
|
9
|
+
**Длина:** 50–60 символов (~580–600 px на десктопе). Google **сам переписывает** title, если тот не описывает
|
|
10
|
+
страницу или переспамлен; поэтому title должен быть точным описанием, а не набором ключей.
|
|
11
|
+
|
|
12
|
+
Правила:
|
|
13
|
+
- Уникальный на каждой странице. Шаблон «{Название} — организация» на 500 страницах = дубли.
|
|
14
|
+
- Главный запрос — в начале (`МРТ головного мозга в Москве …`, а не `В организация можно сделать МРТ головного мозга`).
|
|
15
|
+
- Бренд — в конец. На главной бренд может быть в начале (навигационный интент).
|
|
16
|
+
- Не дублируй `H1` дословно; title может быть «продающим», H1 — «описывающим».
|
|
17
|
+
- Без `!!!`, эмодзи, CAPS, «лучший №1» без доказательств.
|
|
18
|
+
- Не пиши «официальный сайт», если это не официальный сайт организации (вводит в заблуждение).
|
|
19
|
+
- Язык и алфавит — как у контента (русский, кириллица). Смешивать «Moscow» и «Москва» без причины — плохо.
|
|
20
|
+
- Год (`2026`) ставь только если контент действительно актуализирован в этом году и требует даты (цены, приём).
|
|
21
|
+
|
|
22
|
+
Проверка ширины (в DevTools или эмуляторе SERP):
|
|
23
|
+
`document.querySelector('title').textContent.length` — символы; точная ширина зависит от букв (Ш/Ж шире, i/л уже).
|
|
24
|
+
|
|
25
|
+
## 2. `description`
|
|
26
|
+
|
|
27
|
+
**Длина:** 140–160 символов (~920 px).
|
|
28
|
+
**Не влияет на позиции напрямую**, но влияет на CTR — а CTR влияет на поведение и клики.
|
|
29
|
+
- Пиши как мини-объявление: что на странице + факт/польза + призыв.
|
|
30
|
+
- Уникальный; не набор ключей; не «Читайте на сайте».
|
|
31
|
+
- Google может переписать description (взять из текста) — значит первые абзацы тоже должны быть «сниппетными»:
|
|
32
|
+
конкретные ответы, цифры, имена.
|
|
33
|
+
- В медицине: укажи специальность/стаж, цену «от», время приёма, адрес — это то, что повышает CTR.
|
|
34
|
+
|
|
35
|
+
## 3. Заголовки H1–H6
|
|
36
|
+
|
|
37
|
+
- **Ровно один `H1`** на странице. `H1` ≠ логотип, не «Добро пожаловать», не пустой.
|
|
38
|
+
- `H1` отражает главный интент: «МРТ головного мозга в организация», «Кардиология: врачи и диагностика».
|
|
39
|
+
- Иерархия без пропусков: H1 → H2 → H3. Не прыгай H2 → H4 «ради размера шрифта» (размер — CSS).
|
|
40
|
+
- H2/H3 — реальные подтемы и вопросы: «Показания», «Как проходит», «Противопоказания», «Сколько стоит»,
|
|
41
|
+
«Как записаться». Это же — заготовки для FAQ-блока и ИИ-ответов.
|
|
42
|
+
- Не оборачивай в заголовки целые абзацы и не делай заголовком «Наши преимущества» из 5 пунктов без контента.
|
|
43
|
+
- Заголовки не должны быть «спрятанными» (display:none) — скрытый текст = риск.
|
|
44
|
+
|
|
45
|
+
## 4. URL
|
|
46
|
+
|
|
47
|
+
Правила:
|
|
48
|
+
- **Латиница + транслит**, строчные буквы, дефисы между словами. Google прямо рекомендует `-`, а не `_`
|
|
49
|
+
(уточнено в документации Google в октябре 2026).
|
|
50
|
+
- Без стоп-слов: `/uslugi/mrt/`, а не `/uslugi/mrt-uslugi-v-moskve-luchshaya-klinika/`.
|
|
51
|
+
- Без `.html/.php`, если это не требование стека; без `index.php` в каноническом URL.
|
|
52
|
+
- Без дат у обновляемых страниц (`/blog/vysokoe-davlenie/`, не `/2024/03/12/vysokoe-davlenie/`).
|
|
53
|
+
- Без ID, если можно: `/vrachi/ivanov-ivan/`, не `/vrachi/?ID=1234`.
|
|
54
|
+
- Без параметров в каноническом URL; UTM/сортировки — через `Clean-param`/canonical.
|
|
55
|
+
- Транслит: используй устойчивую схему (`й→y`, `я→ya`, `ж→zh`, `х→h` или `kh` — главное, единообразно).
|
|
56
|
+
Не переводи имена врачей «на английский» (`Ivanov`, не `Ivan-off`).
|
|
57
|
+
- Смена URL — **только с 301** и обновлением внутренних ссылок/sitemap (см. `technical-seo.md` §12).
|
|
58
|
+
|
|
59
|
+
## 5. Контент, который ранжируется
|
|
60
|
+
|
|
61
|
+
### Структура страницы услуги (эталон)
|
|
62
|
+
1. `H1` + первый абзац-ответ: что это, для кого, где, сколько стоит/как записаться (2–4 строки).
|
|
63
|
+
2. Блок «Кому показано» / «Показания» — список.
|
|
64
|
+
3. «Как проходит» — по шагам (для медицинских процедур обязательно).
|
|
65
|
+
4. «Противопоказания и ограничения» — честно, со ссылкой «проконсультируйтесь с врачом».
|
|
66
|
+
5. «Подготовка» — практическая польза (часто ищут отдельно).
|
|
67
|
+
6. «Цены» — таблица/список, цена «от», что входит.
|
|
68
|
+
7. «Врачи» — 2–4 карточки со ссылками на профили.
|
|
69
|
+
8. «FAQ» — 5–8 реальных вопросов (из Вордстата/подсказок/GSC).
|
|
70
|
+
9. «Как записаться» — телефон, онлайн-форма, адрес, часы.
|
|
71
|
+
10. Экспертный блок: кто проверил текст, дата обновления, источники.
|
|
72
|
+
|
|
73
|
+
### Требования к тексту
|
|
74
|
+
- Отвечай на интент в **первых 100–150 словах** — и человек, и ИИ-ответы берут начало.
|
|
75
|
+
- Конкретика: цифры, сроки, имена, оборудование, цены. «Современное оборудование» — вода.
|
|
76
|
+
- Один кластер = одна страница. Не склеивай «МРТ головы» и «МРТ позвоночника» в одну гигантскую.
|
|
77
|
+
- Абзацы 2–4 строки, списки, таблицы, подзаголовки — читаемость и «извлекаемость» для ИИ.
|
|
78
|
+
- Уникальность: не копируй тексты с других медсайтов; перерабатывай в факты + местную специфику.
|
|
79
|
+
- Объём: не «минимум 3000 слов», а «достаточно, чтобы полно ответить». Ориентир: услуга 600–1500 слов,
|
|
80
|
+
статья 800–2000, карточка врача 300–700. **Не добивай объём водой.**
|
|
81
|
+
- E-E-A-T: автор, рецензент, дата, источники — см. `eeat-medical.md`.
|
|
82
|
+
- Не обещай результат лечения; используй «помогает диагностировать», «применяется при», «врач подберёт».
|
|
83
|
+
|
|
84
|
+
### Свежесть (freshness)
|
|
85
|
+
- Обновляй даты только при реальном изменении контента; «подмена даты» без правок — обман.
|
|
86
|
+
- Цены/расписание/приём — пересматривать минимум раз в квартал.
|
|
87
|
+
- Статьи — раз в 6–12 месяцев проверять актуальность (клинические рекомендации меняются).
|
|
88
|
+
- Устаревшую страницу — обновить или 301 на актуальную, не оставлять «мертвой» в индексе.
|
|
89
|
+
|
|
90
|
+
## 6. Изображения
|
|
91
|
+
|
|
92
|
+
| Параметр | Правило |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `alt` | описывает содержимое, 3–12 слов. `alt="МРТ-аппарат 1.5 Тл в кабинете организация"`, не `alt="мрт москва купить"` |
|
|
95
|
+
| Декоративные | `alt=""` (пустой), не мусорить ключами |
|
|
96
|
+
| Размеры | всегда `width`/`height` или `aspect-ratio` (CLS) |
|
|
97
|
+
| Формат | WebP/AVIF, JPEG/PNG как фолбэк; SVG для иконок |
|
|
98
|
+
| Вес | ≤ 150–200 КБ для контентных, `srcset` для адаптива |
|
|
99
|
+
| Lazy | `loading="lazy"` **ниже первого экрана**; LCP-картинка — без lazy, с `fetchpriority="high"` |
|
|
100
|
+
| Имена файлов | латиница, описательно: `mrt-golovnogo-mozga-service-desk.webp` |
|
|
101
|
+
| Текст на картинке | не заменяет текст страницы (поисковик читает плохо) |
|
|
102
|
+
| Лицензия | только свои/лицензированные фото; стоки врачей вместо реальных — минус доверию |
|
|
103
|
+
|
|
104
|
+
## 7. Внутренние ссылки и анкоры
|
|
105
|
+
|
|
106
|
+
- Каждая страница получает **входящие** ссылки: из хаба раздела, из смежных услуг, из статей, из крошек.
|
|
107
|
+
- Исходящие из текста: **2–6** на страницу (1000 слов), анкоры описательные: «записаться к кардиологу»,
|
|
108
|
+
«цены на МРТ», а не «здесь», «подробнее», «читать».
|
|
109
|
+
- Не ставь все ссылки в первый абзац и не превращай абзац в список ссылок.
|
|
110
|
+
- Ссылки на важные страницы — с более важных страниц (с главной, из хаба).
|
|
111
|
+
- Не ссылайся на `noindex`-страницы ради «веса» — бесполезно.
|
|
112
|
+
- `nofollow` внутри сайта — только для служебных/рекламных; не закрывай им нормальную навигацию.
|
|
113
|
+
- Проверяй битые ссылки (`seo-audit.mjs` / краул), они бьют и по поведению, и по обходу.
|
|
114
|
+
|
|
115
|
+
## 8. Open Graph и Twitter Cards
|
|
116
|
+
|
|
117
|
+
```html
|
|
118
|
+
<meta property="og:type" content="website"> <!-- article для статей/новостей -->
|
|
119
|
+
<meta property="og:site_name" content="организация">
|
|
120
|
+
<meta property="og:locale" content="ru_RU">
|
|
121
|
+
<meta property="og:title" content="МРТ головного мозга в организация, Москва">
|
|
122
|
+
<meta property="og:description" content="Цена от 4 500 ₽, результат в день исследования, расшифровка врачом.">
|
|
123
|
+
<meta property="og:url" content="https://example.org/uslugi/mrt-golovy/">
|
|
124
|
+
<meta property="og:image" content="https://example.org/upload/og/mrt-golovy-1200x630.jpg">
|
|
125
|
+
<meta property="og:image:width" content="1200">
|
|
126
|
+
<meta property="og:image:height" content="630">
|
|
127
|
+
<meta property="og:image:alt" content="МРТ головного мозга, аппарат в клинике">
|
|
128
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Правила:
|
|
132
|
+
- `og:image` — 1200×630 (1.91:1), реальное фото/инфографика, не логотип; абсолютный URL.
|
|
133
|
+
- `og:url` = canonical URL.
|
|
134
|
+
- Google использует `og:title` как один из источников title для сниппета — держи его согласованным с `<title>`.
|
|
135
|
+
- Telegram/WhatsApp/ВК берут OG — это важный канал для клиники (пересылка страниц врачами/пациентами).
|
|
136
|
+
|
|
137
|
+
## 9. Хлебные крошки
|
|
138
|
+
|
|
139
|
+
- Видимые крошки на всех страницах, кроме главной: `Главная → Услуги → МРТ → МРТ головы`.
|
|
140
|
+
- Разметка `BreadcrumbList` (JSON-LD) — дублирует видимую навигацию, последний элемент без ссылки.
|
|
141
|
+
- Google показывает крошки **только на десктопе** (с января 2025 мобильные крошки в сниппете не выводятся) —
|
|
142
|
+
но разметку всё равно делай: она помогает понимать структуру и Яндексу.
|
|
143
|
+
- Крошки и URL-структура должны совпадать (не «Главная → Лечение → МРТ», если URL `/uslugi/mrt/`).
|
|
144
|
+
|
|
145
|
+
## 10. Микроразметка на странице (минимум)
|
|
146
|
+
|
|
147
|
+
| Элемент | Где | Обязательные поля |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `BreadcrumbList` | все внутренние | `itemListElement[].position/name/item` |
|
|
150
|
+
| `WebPage` / `MedicalWebPage` | контентные | `name`, `url`, `inLanguage`, `about`, `datePublished`, `dateModified`, `lastReviewed`, `reviewedBy` |
|
|
151
|
+
| `Organization` / `MedicalOrganization` | главная | `name`, `url`, `logo`, `address`, `telephone`, `sameAs` |
|
|
152
|
+
| `Physician` | профиль врача | `name`, `medicalSpecialty`, `jobTitle`, `worksFor`, `alumniOf`, `url`, `image` |
|
|
153
|
+
| `Service` / `MedicalProcedure` | услуга | `name`, `serviceType`, `provider`, `areaServed`, `offers` (если цена публичная) |
|
|
154
|
+
| `Article` / `NewsArticle` | статьи/новости | `headline`, `author` (Person), `datePublished`, `dateModified`, `image`, `publisher` |
|
|
155
|
+
| `FAQPage` | блок вопросов | `mainEntity[].name`, `acceptedAnswer.text` (с 07.05.2026 Google **не показывает** FAQ
|
|
156
|
+
rich results — разметка остаётся полезной для понимания, но сниппет не обещай) |
|
|
157
|
+
|
|
158
|
+
Все поля должны совпадать с видимым контентом. Не размечай рейтинги/цены, которых нет на странице.
|
|
159
|
+
Шаблоны: `structured-data.md` и `assets/snippets/`.
|
|
160
|
+
|
|
161
|
+
## 11. Сниппет: как выглядит и как управлять
|
|
162
|
+
|
|
163
|
+
Что собирает Google/Яндекс в сниппет: title (или его перепев), description (или фрагмент текста),
|
|
164
|
+
URL (крошки/путь), доп. элементы (звёзды рейтинга, дата, цена, «быстрые ссылки»).
|
|
165
|
+
|
|
166
|
+
Управление:
|
|
167
|
+
- `title`/`description` — базово.
|
|
168
|
+
- Текст в первых абзацах — то, из чего вырежется фрагмент, если description перепишут.
|
|
169
|
+
- `noindex` — не использовать для «управления сниппетом».
|
|
170
|
+
- `nosnippet`, `max-snippet`, `data-nosnippet` — только если реально нужно скрыть фрагмент
|
|
171
|
+
(например, платный контент в статье); для клиники почти всегда вредно.
|
|
172
|
+
- «Быстрые ссылки» (Яндекс) и «Sitelinks» (Google) формируются автоматически — влияй структурой навигации
|
|
173
|
+
и понятными заголовками разделов.
|
|
174
|
+
|
|
175
|
+
## 12. Чек-лист on-page (10 пунктов, проверяй на каждой странице)
|
|
176
|
+
|
|
177
|
+
- [ ] `title` уникальный, 50–60 симв., интент в начале, бренд в конце.
|
|
178
|
+
- [ ] `description` уникальный, 140–160 симв., с фактом/пользой.
|
|
179
|
+
- [ ] Один `H1`, совпадает с интентом; H2–H6 по иерархии.
|
|
180
|
+
- [ ] URL читаемый, латиница, дефисы, без параметров.
|
|
181
|
+
- [ ] Первые 100–150 слов отвечают на запрос.
|
|
182
|
+
- [ ] Блоки «показания/как проходит/противопоказания/цены/FAQ/как записаться» (для услуг).
|
|
183
|
+
- [ ] Изображения: `alt`, `width/height`, WebP/AVIF, lazy ниже фолда, LCP без lazy.
|
|
184
|
+
- [ ] 2–6 внутренних ссылок с описательными анкорами + входящие ссылки есть.
|
|
185
|
+
- [ ] OG/Twitter + `og:image` 1200×630.
|
|
186
|
+
- [ ] Крошки + JSON-LD, поля совпадают с контентом.
|
|
187
|
+
|
|
188
|
+
## 13. Примеры «плохо → хорошо»
|
|
189
|
+
|
|
190
|
+
| Плохо | Хорошо |
|
|
191
|
+
|---|---|
|
|
192
|
+
| `title` = «Главная» | `организация, Москва — официальный сайт больницы` |
|
|
193
|
+
| `title` = «Услуги, цены, врачи, запись, Москва, клиника, МРТ, КТ, УЗИ» | `МРТ головного мозга в Москве — цена от 4 500 ₽ | организация` |
|
|
194
|
+
| `H1` = «Добро пожаловать на наш сайт!» | `H1` = «Кардиология: врачи, диагностика и лечение в организация» |
|
|
195
|
+
| `alt` = «картинка1» / `alt` = «мрт москва дешево» | `alt` = «Кабинет МРТ в организация: аппарат 1.5 Тл» |
|
|
196
|
+
| URL `/index.php?page=uslugi&id=42` | `/uslugi/mrt-golovy/` |
|
|
197
|
+
| Анкор «Подробнее» ×20 | «записаться к кардиологу», «цены на МРТ», «подготовка к МРТ» |
|
|
198
|
+
| «Мы гарантируем полное излечение» | «Врач подберёт схему лечения по результатам обследования» |
|
|
199
|
+
| Текст 5000 слов «обо всём» | 900 слов строго по интенту + FAQ + цены |
|
|
200
|
+
|
|
201
|
+
## 14. Первоисточники
|
|
202
|
+
|
|
203
|
+
- Как формируются title-ссылки: https://developers.google.com/search/docs/appearance/title-link
|
|
204
|
+
- Как формируются сниппеты: https://developers.google.com/search/docs/appearance/snippet
|
|
205
|
+
- URL-структура (включая дефисы vs подчёркивания): https://developers.google.com/search/docs/crawling-indexing/url-structure
|
|
206
|
+
- Изображения: https://developers.google.com/search/docs/appearance/google-images
|
|
207
|
+
- Structured data (общее): https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data
|
|
208
|
+
- Спам-политики (переспам, скрытый текст): https://developers.google.com/search/docs/essentials/spam-policies
|
|
209
|
+
- Обновления документации: https://developers.google.com/search/updates
|