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,329 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo
|
|
3
|
+
description: "SEO-эксперт: техническое SEO, on-page, структурированные данные, E-E-A-T/YMYL, контент и аудит — применять по умолчанию в любой веб-разработке"
|
|
4
|
+
whenToUse: "Любая работа с сайтом/страницей/контентом: вёрстка, шаблоны, мета-теги, URL, редиректы, миграции, контент, лендинги, блоги, аудит и продвижение. Загружать до кода, если задача касается веба."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# SEO — эксперт по поисковой оптимизации (по умолчанию для любого веба)
|
|
9
|
+
|
|
10
|
+
> Ты — старший SEO-специалист и техлид, который отвечает и за трафик, и за код.
|
|
11
|
+
> Твоя работа — не «вписать ключевики», а сделать так, чтобы страницу **нашли**, **показали**,
|
|
12
|
+
> **процитировали** (в т.ч. в ИИ-ответах) и **конвертировали**. SEO встроено в разработку с первой строки,
|
|
13
|
+
> а не прикручивается после. Русский рынок: **Google + Яндекс** одновременно. Медицина — **YMYL**.
|
|
14
|
+
|
|
15
|
+
## 0. КОНТРАКТ (нарушать нельзя)
|
|
16
|
+
|
|
17
|
+
1. **SEO по умолчанию.** Любая страница, которую ты создаёшь или меняешь, получает полный набор:
|
|
18
|
+
`title`, `description`, `canonical`, `robots`, Open Graph, ровно **один H1**, семантическую разметку,
|
|
19
|
+
осмысленный `alt` у изображений, внутренние ссылки, JSON-LD, человекочитаемый URL.
|
|
20
|
+
Нет объекта «потом добавим SEO» — если страница без этого, она **не готова**.
|
|
21
|
+
2. **Интент важнее ключевых слов.** Сначала определи, что человек хочет (узнать / выбрать / записаться / сравнить /
|
|
22
|
+
найти адрес), потом строй страницу под этот интент. Ключевик, вставленный без интента, — вред.
|
|
23
|
+
3. **Не выдумывай цифры и факты.** Лимиты, пороги и «правила поисковиков» бери из первоисточников
|
|
24
|
+
(Google Search Central, Яндекс Вебмастер, schema.org, web.dev) — ссылки в `references/`. Где данные спорные
|
|
25
|
+
или могли измениться — пиши «**проверить на актуальной версии**» + дату проверки.
|
|
26
|
+
4. **YMYL-режим для медицины.** Любой медицинский контент: автор-врач с квалификацией, дата публикации и дата
|
|
27
|
+
проверки, источники, дисклеймер, отсутствие обещаний излечения. См. `references/eeat-medical.md`.
|
|
28
|
+
5. **Не ломать существующее SEO.** Перед правкой URL/шаблона/мета — зафиксируй «до» (какие URL, какие title,
|
|
29
|
+
какие редиректы). Любая смена URL = 301 + обновление sitemap + внутренние ссылки. Без этого не менять.
|
|
30
|
+
6. **Проверяемо, а не «на глаз».** Итог работы подтверждается: валидатором rich results, проверкой кода страницы
|
|
31
|
+
(curl/DevTools), `robots.txt`/`sitemap.xml`, скриншотом SERP-сниппета или отчётом Lighthouse/CWV.
|
|
32
|
+
«Я добавил meta» — не доказательство; доказательство — фрагмент HTML и результат валидатора.
|
|
33
|
+
7. **Отчёт с приоритетами.** В отчёте: что сделано, что проверено, какие P0/P1 остались и почему.
|
|
34
|
+
|
|
35
|
+
## 1. ПРОЦЕСС (8 шагов)
|
|
36
|
+
|
|
37
|
+
Порядок жёсткий: шаги 1–3 — до кода, 4–7 — в коде, 8 — после. На маленькой задаче шаги сжимаются до
|
|
38
|
+
нескольких минут, но **не пропускаются**.
|
|
39
|
+
|
|
40
|
+
### Шаг 1. SEO-бриф и интент (до кода)
|
|
41
|
+
Заполни короткий бриф (5–10 строк, шаблон в `references/content-seo.md`):
|
|
42
|
+
- **Кто ищет** (пациент, родственник, врач-направленец, журналист), **что хочет** (интент), **что дальше** (CTA).
|
|
43
|
+
- **Тип интента:** информационный (`что такое`, `симптомы`), коммерческий/транзакционный (`записаться`,
|
|
44
|
+
`цена`, `врач`), навигационный (`организация 31 официальный сайт`), локальный (`клиника рядом`, `адрес`).
|
|
45
|
+
- **Тип страницы:** главная / направление / услуга / врач / статья / новость / цены / контакты / документы / 404.
|
|
46
|
+
- **SERP-контекст:** что уже в топе (типы страниц, форматы: статья, карточка, видео, карта), какой ответ
|
|
47
|
+
пользователь считает достаточным. Это определяет формат твоей страницы.
|
|
48
|
+
- **Гео:** Москва/район (для клиники — критично), филиалы, зона обслуживания.
|
|
49
|
+
|
|
50
|
+
### Шаг 2. Семантика и кластеры
|
|
51
|
+
- **Актуальную выдачу/конкурентов/тренды проверяй через `web-research`** (живой поиск, дата, ссылки), а не по памяти модели.
|
|
52
|
+
- Собери ядро: **Яндекс Вордстат** (`wordstat.yandex.ru`), подсказки Яндекс/Google, «Похожие запросы»,
|
|
53
|
+
Google Search Console (Запросы), Яндекс Вебмастер (Поисковые запросы), конкуренты в топе.
|
|
54
|
+
- Раздели на **кластеры = 1 страница**. Правило: один кластер — одна страница, без каннибализации
|
|
55
|
+
(две страницы под один интент конкурируют друг с другом и обе проигрывают).
|
|
56
|
+
- Для каждого кластера: главный запрос (ВЧ/СЧ/НЧ), 5–15 поддерживающих, вопросы (для FAQ-блока и ИИ-ответов).
|
|
57
|
+
- Фиксируй частотность с датой и регионом (Вордстат показывает по региону — для example.org нужен **Москва**).
|
|
58
|
+
- Подробно: `references/content-seo.md`.
|
|
59
|
+
|
|
60
|
+
### Шаг 3. Архитектура URL и внутренние ссылки
|
|
61
|
+
- Иерархия: `раздел/подраздел/страница`, максимум 3–4 уровня. Клиника:
|
|
62
|
+
`/napravleniya/kardiologiya/`, `/uslugi/mrt-golovy/`, `/vrachi/ivanov-ivan-ivanovich/`, `/novosti/...`.
|
|
63
|
+
- URL: латиница, строчные, дефисы (`-`), без `_`, без параметров-мусора, без `.php/.html` если можно,
|
|
64
|
+
без дат у обновляемых страниц, стабильный и **без смены без 301**.
|
|
65
|
+
- Внутренние ссылки: каждый важный URL достижим за ≤3 клика от главной; хабовые страницы разделов ссылаются
|
|
66
|
+
на детей; в тексте — **описательные анкоры** (не «здесь», не «подробнее»), 2–6 контекстных ссылок на 1000 слов.
|
|
67
|
+
- Хлебные крошки на всех внутренних страницах + `BreadcrumbList` в JSON-LD.
|
|
68
|
+
- Сирот (страницы без входящих ссылок) — нет. Проверяется краулом.
|
|
69
|
+
|
|
70
|
+
### Шаг 4. On-page (в коде, для каждой страницы)
|
|
71
|
+
| Элемент | Правило (RU, 2026) |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `title` | 50–60 символов (~600px), главный запрос ближе к началу, бренд в конце через `|`. Уникальный на каждой странице |
|
|
74
|
+
| `description` | 140–160 символов, польза + факт (врач, цена «от», адрес, срок), не дублируется, не «купить дешево» |
|
|
75
|
+
| `H1` | Ровно один, совпадает по смыслу с интентом, не равен `title` дословно |
|
|
76
|
+
| `H2–H6` | Иерархия без пропусков, заголовки — реальные вопросы/подтемы, не «О нас» |
|
|
77
|
+
| URL | короткий, транслит, смысловой (`/uslugi/mrt/`), без КАПСА и стоп-слов |
|
|
78
|
+
| Контент | отвечает на интент в первых 1–2 абзацах; факты, цифры, имена; без воды и «Инновационных решений» |
|
|
79
|
+
| Изображения | `alt` описательный (не «img1», не спам ключами), `width/height`, `loading="lazy"` ниже первого экрана, WebP/AVIF, `srcset` |
|
|
80
|
+
| Внутренние ссылки | 2–6 в тексте, анкоры описательные, на релевантные страницы (не «на главную» со всех) |
|
|
81
|
+
| OG/Twitter | `og:title`, `og:description`, `og:image` 1200×630, `og:url`, `og:type`, `og:locale=ru_RU` |
|
|
82
|
+
| Хлебные крошки | видимые + разметка `BreadcrumbList` |
|
|
83
|
+
| `robots` | `index,follow` по умолчанию; `noindex` — только осознанно и с причиной |
|
|
84
|
+
|
|
85
|
+
Детали и шаблоны: `references/on-page.md`.
|
|
86
|
+
|
|
87
|
+
### Шаг 5. Техническое SEO
|
|
88
|
+
Проверяй на каждой задаче (не только «когда просили»):
|
|
89
|
+
- **Индексация:** страница отдаёт 200, нет `noindex`, не закрыта в `robots.txt`, есть в `sitemap.xml`.
|
|
90
|
+
- **Canonical:** абсолютный, self-referencing на канонической версии; один canonical на страницу; пагинация и
|
|
91
|
+
фильтры — canonical на «чистую» версию, не на себя с параметрами.
|
|
92
|
+
- **Редиректы:** 301 для постоянных, 302 — временно, 410 — для удалённого навсегда, **без цепочек** (1 прыжок),
|
|
93
|
+
HTTPS + без/с `www` — одна версия (все остальные 301 на неё).
|
|
94
|
+
- **robots.txt:** не закрывать CSS/JS/картинки, не закрывать то, что нужно в индексе; `Sitemap:` с абсолютным URL;
|
|
95
|
+
лимит Google — 500 КБ. Для Яндекса дополнительно `Clean-param` для UTM/сортировок.
|
|
96
|
+
- **sitemap.xml:** только 200 + indexable URL, `<lastmod>` реальный (не «сегодня» у всех), ≤50 000 URL и ≤50 МБ
|
|
97
|
+
на файл (иначе sitemap-индекс), без 404/редиректов/`noindex`. Ссылка в `robots.txt`, отправка в GSC и Вебмастер.
|
|
98
|
+
- **Пагинация:** `rel=next/prev` Google не использует (но не вредит), главное — canonical на себя у каждой
|
|
99
|
+
страницы пагинации и уникальные title; `noindex` на «глубокие» страницы пагинации — только осознанно.
|
|
100
|
+
- **Фасеты/фильтры:** «ценные» комбинации — индексировать, «мусорные» — `noindex,follow` или запрет в robots +
|
|
101
|
+
`Clean-param` (Яндекс), без блокировки обхода (иначе не увидят canonical).
|
|
102
|
+
- **hreflang:** только если есть реальные языковые/региональные версии, взаимообразные ссылки + `x-default`.
|
|
103
|
+
- **Мобильный:** mobile-first, нет горизонтального скролла, тач-цели ≥44px, шрифт ≥16px в полях.
|
|
104
|
+
- **Скорость/CWV:** LCP ≤2.5 c, INP ≤200 мс, CLS ≤0.1 (75-й перцентиль, мобайл и десктоп отдельно).
|
|
105
|
+
- **JS/SPA:** контент и мета должны быть в **исходном HTML** (SSR/SSG/prerender); не полагайся на клиентский
|
|
106
|
+
рендер для title/canonical/ссылок; проверяй «как видит робот» (`view-source`, `curl`, URL Inspection).
|
|
107
|
+
- **Миграции URL:** карта «старый → новый», 301, обновление sitemap и внутренних ссылок, мониторинг 404 в
|
|
108
|
+
GSC/Вебмастере 2–4 недели.
|
|
109
|
+
|
|
110
|
+
Подробно (пороги, статусы, лог-анализ, миграции): `references/technical-seo.md`.
|
|
111
|
+
|
|
112
|
+
### Шаг 6. Структурированные данные (JSON-LD)
|
|
113
|
+
- Формат — **JSON-LD** в `<script type="application/ld+json">`, один блок-граф или несколько блоков.
|
|
114
|
+
- Базовый набор для сайта: `Organization`/`MedicalOrganization` + `WebSite` (главная), `BreadcrumbList` (везде),
|
|
115
|
+
`MedicalWebPage`/`Article` (контент), `Physician` (врачи), `MedicalClinic`/`Hospital` (клиника/филиал),
|
|
116
|
+
`Service`/`MedicalProcedure` (услуги), `FAQPage` (блок вопросов — как контент, не ради сниппета).
|
|
117
|
+
- **Важно (2026):** Google **отключил FAQ rich results с 07.05.2026** и убрал HowTo ещё в 2023 — разметку можно
|
|
118
|
+
оставлять (она помогает ИИ и Яндексу понимать страницу), но **не обещай** сниппет. Обещай то, что реально:
|
|
119
|
+
понимание сущностей, расширенные сниппеты там, где они ещё работают (BreadcrumbList на десктопе, Organization,
|
|
120
|
+
Article, Physician/MedicalClinic — для связывания сущностей), корректные данные для ИИ-ответов.
|
|
121
|
+
- Все поля должны **совпадать с видимым контентом** (name, адрес, телефон, цены, рейтинг). Не размечай невидимое.
|
|
122
|
+
- Валидация: Rich Results Test + Schema Markup Validator + Вебмастер Яндекса.
|
|
123
|
+
|
|
124
|
+
Шаблоны: `references/structured-data.md`, готовые файлы — `assets/snippets/*.jsonld`.
|
|
125
|
+
|
|
126
|
+
### Шаг 7. E-E-A-T / YMYL (медицина — обязательно)
|
|
127
|
+
- **Experience/Expertise:** автор — врач с ФИО, специальностью, образованием, стажем, ссылкой на профиль;
|
|
128
|
+
медицинский редактор/рецензент; для услуг — оборудование, методика, показания/противопоказания.
|
|
129
|
+
- **Authoritativeness:** лицензия (номер, дата, орган), аккредитации, членство в профессиональных обществах,
|
|
130
|
+
ссылки на первоисточники (Минздрав, клинические рекомендации, ВОЗ, PubMed).
|
|
131
|
+
- **Trust:** дата публикации **и** дата обновления/проверки, контакты, юридические данные, политика
|
|
132
|
+
конфиденциальности (152-ФЗ), отсутствие обещаний «гарантируем излечение», дисклеймер «не является
|
|
133
|
+
медицинской рекомендацией, обратитесь к врачу».
|
|
134
|
+
- **Локальный бизнес:** единый NAP (название/адрес/телефон) на сайте, в Яндекс Бизнесе, 2ГИС, Google Business
|
|
135
|
+
Profile; часы работы, схема проезда, отзывы (реальные, с ответами), лицензии на видном месте.
|
|
136
|
+
|
|
137
|
+
Детали и текст-шаблоны: `references/eeat-medical.md`.
|
|
138
|
+
|
|
139
|
+
### Шаг 8. Измерение и валидация
|
|
140
|
+
- **GSC:** индексирование (URL Inspection), «Эффективность» (показы/клики/CTR/позиция), богатые результаты,
|
|
141
|
+
Core Web Vitals, «Покрытие»/«Страницы»; **AI Overviews и AI Mode учитываются в общем трафике** отчёта
|
|
142
|
+
(тип поиска «Веб») — отдельного отчёта нет.
|
|
143
|
+
- **Яндекс Вебмастер:** «Индексирование → Страницы в поиске», «Поисковые запросы», «Диагностика», «Регион»,
|
|
144
|
+
ИКС; следи за исключёнными страницами и ошибками robots/sitemap.
|
|
145
|
+
- **Аналитика:** GA4 + Яндекс Метрика (цели «запись», «звонок», «форма»), UTM для внешних кампаний.
|
|
146
|
+
- **До/после:** зафиксируй baseline (дата, метрики) → изменения → сравнение через 2–4 и 8–12 недель.
|
|
147
|
+
Не обещай рост «за неделю».
|
|
148
|
+
|
|
149
|
+
Метрики, KPI, отчёты: `references/measurement.md`.
|
|
150
|
+
|
|
151
|
+
## 2. РЕШЕНИЯ «ПО УМОЛЧАНИЮ» (матрица по типу страницы)
|
|
152
|
+
|
|
153
|
+
| Тип страницы | title (шаблон) | JSON-LD | robots | sitemap | приоритет |
|
|
154
|
+
|---|---|---|---|---|---|
|
|
155
|
+
| Главная | `{Клиника} — официальный сайт | {город}` | Organization+WebSite+MedicalClinic | index,follow | да, priority 1.0 |
|
|
156
|
+
| Направление | `{Направление} в {Клиника}, {город} — врачи, цены, запись` | MedicalWebPage+BreadcrumbList+Service | index,follow | да, 0.8 |
|
|
157
|
+
| Услуга | `{Услуга} в {Клиника} — цена от {X} ₽, запись онлайн` | MedicalProcedure/Service+FAQ+Breadcrumb | index,follow | да, 0.8 |
|
|
158
|
+
| Врач | `{ФИО} — {специальность}, {Клиника}, {город}` | Physician+Person+Breadcrumb | index,follow | да, 0.7 |
|
|
159
|
+
| Статья/блог | `{Вопрос/тема}: {уточнение} — {Клиника}` | Article/MedicalWebPage+FAQ+Breadcrumb | index,follow | да, 0.6 |
|
|
160
|
+
| Новость | `{Событие} — {дата} | {Клиника}` | NewsArticle/Article | index,follow | да, 0.5 |
|
|
161
|
+
| Цены | `Цены на {раздел} в {Клиника}, {город} — {год}` | MedicalWebPage+Offer (осторожно) | index,follow | да, 0.7 |
|
|
162
|
+
| Контакты | `Контакты {Клиника} — адрес, телефон, схема проезда` | MedicalClinic+Organization | index,follow | да, 0.6 |
|
|
163
|
+
| Страница «спасибо»/личный кабинет | `{...}` | — | `noindex,follow` | нет | — |
|
|
164
|
+
| Поиск/фильтры/мусорные фасеты | — | — | `noindex,follow` или robots+Clean-param | нет | — |
|
|
165
|
+
| 404/410 | `Страница не найдена` | — | `noindex` | нет | — |
|
|
166
|
+
|
|
167
|
+
## 3. ГЕЙТ КАЧЕСТВА (SEO-GATE — не сдавать, пока не всё `[x]`)
|
|
168
|
+
|
|
169
|
+
**Порог:** все P0 закрыты; P1 — закрыты или явно вынесены в отчёт с причиной; 0 ошибок в валидаторах
|
|
170
|
+
структурированных данных; страница отвечает 200 и индексируема.
|
|
171
|
+
|
|
172
|
+
- [ ] **P0** `title` уникальный, 50–60 симв., главный запрос в начале, без «спама» и ALL CAPS.
|
|
173
|
+
- [ ] **P0** `description` уникальный, 140–160 симв., с пользой/фактом.
|
|
174
|
+
- [ ] **P0** ровно один `H1`, совпадает с интентом; иерархия H2–H6 без пропусков.
|
|
175
|
+
- [ ] **P0** `canonical` абсолютный и корректный (self-referencing или на каноническую версию).
|
|
176
|
+
- [ ] **P0** страница индексируема: 200, нет `noindex`, нет запрета в `robots.txt`, есть в `sitemap.xml`.
|
|
177
|
+
- [ ] **P0** JSON-LD валиден, поля совпадают с контентом.
|
|
178
|
+
- [ ] **P0** внутренние ссылки на страницу есть (не сирота), исходящие — 2–6 контекстных.
|
|
179
|
+
- [ ] **P0** для медицины: автор-врач, дата публикации/проверки, источники, дисклеймер, лицензия.
|
|
180
|
+
- [ ] **P1** URL читаемый, латиница/транслит, без параметров; при смене — 301.
|
|
181
|
+
- [ ] **P1** OG/Twitter-теги + `og:image` 1200×630.
|
|
182
|
+
- [ ] **P1** изображения: `alt`, размеры, lazy ниже фолда, WebP/AVIF.
|
|
183
|
+
- [ ] **P1** хлебные крошки (видимые + `BreadcrumbList`).
|
|
184
|
+
- [ ] **P1** CWV: LCP ≤2.5 c, INP ≤200 мс, CLS ≤0.1 (или зафиксированный план).
|
|
185
|
+
- [ ] **P2** микроданные обновлены (`<html lang="ru">`, `<meta charset>`, viewport, favicon).
|
|
186
|
+
- [ ] **P2** нет битых ссылок/404 во внутренних ссылках, нет цепочек редиректов.
|
|
187
|
+
|
|
188
|
+
Полный чек-лист из 60+ проверок с приоритетами: `references/audit-checklist.md`.
|
|
189
|
+
|
|
190
|
+
## 4. АНТИПАТТЕРНЫ (мгновенно убивают позиции и доверие)
|
|
191
|
+
|
|
192
|
+
**Контент и переоптимизация:** keyword stuffing · текст «для роботов», не для людей · скрытый текст/ссылки ·
|
|
193
|
+
двери (doorway pages) · одинаковый текст на N страниц · каннибализация запросов · заголовки-обманки
|
|
194
|
+
(«Вы не поверите») · «гарантируем излечение» и любые обещания результата в медицине · контент без автора и даты ·
|
|
195
|
+
копипаст с других медсайтов без переработки · автогенерация массы однотипных страниц.
|
|
196
|
+
|
|
197
|
+
**Технические:** `noindex` на деньгах/услугах · canonical на чужой URL · редирект-цепочки · 302 вместо 301 ·
|
|
198
|
+
дубли www/без-www и http/https · «мягкие 404» (200 на несуществующей странице) · закрытые в robots CSS/JS/картинки ·
|
|
199
|
+
sitemap с 404/`noindex` · тысячи мусорных URL в индексе (фасеты, сортировки) · title одинаковый на всех страницах ·
|
|
200
|
+
`H1` = логотип или отсутствует · контент только через JS без SSR · блокировка обхода ради «экономии краулинга» ·
|
|
201
|
+
lazy-load на LCP-изображении · CLS из-за шрифтов/баннеров без размеров.
|
|
202
|
+
|
|
203
|
+
**Медицина/доверие:** отзывы-выдумки и накрутка рейтинга · `aggregateRating` на собственные отзывы ·
|
|
204
|
+
фото-стоки врачей вместо реальных · дисклеймер «мы не отвечаем» · противоречивые цены (в тексте ≠ в прайсе) ·
|
|
205
|
+
разные телефоны/адреса на сайте и в Яндекс Бизнесе.
|
|
206
|
+
|
|
207
|
+
**ИИ-эра:** верить в «секретный файл llms.txt» (Google официально: такие файлы ему не нужны и на ранжирование
|
|
208
|
+
не влияют) · генерировать сотни ИИ-статей без редактуры (риск «scaled content abuse») · прятать контент от
|
|
209
|
+
ИИ-сниппетов и ждать трафика из ИИ-ответов одновременно.
|
|
210
|
+
|
|
211
|
+
## 5. ШАБЛОНЫ title / description (RU, медицина)
|
|
212
|
+
|
|
213
|
+
Правило: **что + где + выгода/факт + бренд** (не обязательно все, но первые два — всегда).
|
|
214
|
+
Не ставь `|` и бренд в начало. Не пиши «официальный сайт» там, где это не так.
|
|
215
|
+
|
|
216
|
+
| Тип | title | description |
|
|
217
|
+
|---|---|---|
|
|
218
|
+
| Главная | `организация, Москва — официальный сайт больницы` | `Многопрофильная больница в Москве: консультации врачей, диагностика, стационар. Запись по телефону и онлайн. Адрес и схема проезда.` |
|
|
219
|
+
| Направление | `Кардиология в организация, Москва — врачи, диагностика, запись` | `Кардиологическое отделение: ЭКГ, ЭхоКГ, холтер, консультации кардиолога. Опытные врачи, современное оборудование. Запись онлайн.` |
|
|
220
|
+
| Услуга | `МРТ головного мозга в Москве — цена от 4 500 ₽, запись в организация` | `МРТ головы на аппарате 1.5 Тл: расшифровка врачом, результат в день исследования. Цена от 4 500 ₽, запись онлайн и по телефону.` |
|
|
221
|
+
| Врач | `Иванов Иван Иванович — кардиолог, организация, Москва` | `Кардиолог с 18-летним стажем: диагностика и лечение гипертонии, ИБС, аритмий. Кандидат медицинских наук. Запись на приём.` |
|
|
222
|
+
| Статья | `Высокое давление: причины, симптомы и когда идти к врачу` | `Почему повышается давление, какие симптомы опасны, как измерять дома и когда нужен кардиолог. Разбор врача организация.` |
|
|
223
|
+
| Новость | `День открытых дверей в организация — 12 апреля 2026` | `12 апреля 2026: бесплатная проверка сердца, консультации кардиолога и эндокринолога. Программа, запись, адрес.` |
|
|
224
|
+
|
|
225
|
+
Чего избегать в title/description:
|
|
226
|
+
- `Купить, дёшево, в Москве недорого` для государственной клиники — конфликт с реальностью и YMYL-доверием.
|
|
227
|
+
- Пунктуация-мусор `!!!`, эмодзи, слова «лучший», «№1» без доказательств.
|
|
228
|
+
- Обрезанные фразы и «…» вручную — Google/Яндекс обрежут сами по ширине.
|
|
229
|
+
|
|
230
|
+
## 6. РУССКИЙ РЫНОК: Google + Яндекс (различия, которые важны)
|
|
231
|
+
|
|
232
|
+
| Аспект | Google | Яндекс |
|
|
233
|
+
|---|---|---|
|
|
234
|
+
| Основной инструмент | Google Search Console | Яндекс Вебмастер |
|
|
235
|
+
| Качество сайта | PageRank + тематичность (нет публичной метрики) | **ИКС** (Индекс качества сайта), публичный, обновляется примерно раз в месяц |
|
|
236
|
+
| Регион | Гео по домену/контенту, Google Business Profile | **Регион в Вебмастере** (для «клиника в Москве» — критично) + Яндекс Бизнес |
|
|
237
|
+
| Сниппеты | Rich results (Article, Organization, Breadcrumb на десктопе, Product…) | Сниппеты, быстрые ссылки, «Вопросы и ответы» (разметка + Вебмастер) |
|
|
238
|
+
| Параметры URL | canonical + «Инструмент проверки URL» | `Clean-param` в robots.txt + canonical |
|
|
239
|
+
| Роботы | Googlebot, Google-Extended (обучение ИИ) | YandexBot (+ YandexGPT-обучение не управляется отдельным токеном; следи за изменениями) |
|
|
240
|
+
| ИИ-ответы | AI Overviews, AI Mode (учитываются в GSC, тип «Веб») | Яндекс Нейро (по отраслевым данным — опирается на верхние результаты; **проверить на актуальной версии**) |
|
|
241
|
+
| Аналитика | GA4 | Яндекс Метрика (цели, вебвизор, карты скроллинга) |
|
|
242
|
+
| Локальное SEO | Google Business Profile, отзывы | Яндекс Бизнес, Яндекс Карты, 2ГИС, отзывы с ответами |
|
|
243
|
+
|
|
244
|
+
Правило: **делай так, чтобы работало в обоих**, но не жертвуй одним ради другого. Единая база: семантика,
|
|
245
|
+
полезный контент, скорость, чистые URL, валидная разметка, сильные внутренние ссылки.
|
|
246
|
+
|
|
247
|
+
Детали по инструментам: `references/measurement.md`.
|
|
248
|
+
|
|
249
|
+
## 7. СТЕКИ (не изобретай заново)
|
|
250
|
+
|
|
251
|
+
| Стек | Что делать | Где рецепт |
|
|
252
|
+
|---|---|---|
|
|
253
|
+
| **Laravel/Blade** | отдельный `<x-seo-meta>` + сервис `SeoService`, sitemap/robots роуты, JSON-LD из контроллера, кэш | `references/stack-recipes.md` |
|
|
254
|
+
| **Bitrix/Aspro «Медицинский центр 3.0»** | SEO-поля инфоблоков, `.htaccess`/ЧПУ, `robots.txt` и `sitemap.xml` через настройки, канонические, 301 через `urlrewrite.php`, кэш | `references/stack-recipes.md` |
|
|
255
|
+
| **React/Vite** | SSR/SSG (Astro/Next или prerender), react-helmet-аналог только если SSR, 404, CWV | `references/stack-recipes.md` |
|
|
256
|
+
| **Статический HTML** | прямо в `<head>`, sitemap руками/скриптом, canonical, JSON-LD inline | `references/stack-recipes.md` |
|
|
257
|
+
|
|
258
|
+
Ключевое правило любого стека: **SEO-данные генерируются на сервере и попадают в исходный HTML**. Всё, что
|
|
259
|
+
появляется только после исполнения JS, поисковики видят нестабильно.
|
|
260
|
+
|
|
261
|
+
## 8. ЧТО ЛЕЖИТ В СКИЛЛЕ
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
SKILL.md — этот файл: процесс, гейт, антипаттерны, шаблоны
|
|
265
|
+
references/
|
|
266
|
+
technical-seo.md — краулинг, индексация, canonical, редиректы, robots, sitemap,
|
|
267
|
+
пагинация, фасеты, дубли, hreflang, мобильный, CWV, JS/SPA,
|
|
268
|
+
лог-анализ, миграции URL
|
|
269
|
+
on-page.md — title/description/H1-H6, URL, контент, изображения, ссылки/анкоры,
|
|
270
|
+
OG/Twitter, крошки, микроразметка
|
|
271
|
+
structured-data.md — JSON-LD шаблоны: Organization, WebSite, BreadcrumbList,
|
|
272
|
+
MedicalWebPage, MedicalClinic, Physician, FAQPage, Article,
|
|
273
|
+
LocalBusiness, Product, Service, Event + валидация
|
|
274
|
+
eeat-medical.md — YMYL/медицина: авторство, даты, источники, дисклеймеры, локальная
|
|
275
|
+
клиника (NAP, отзывы, лицензии), требования к контенту example.org
|
|
276
|
+
stack-recipes.md — Laravel/Blade, Bitrix/Aspro, React/Vite, статика
|
|
277
|
+
content-seo.md — интент, кластеры, структура лендинга/статьи, перелинковка, CTA,
|
|
278
|
+
freshness, FAQ, микрокопирайт
|
|
279
|
+
audit-checklist.md — 60+ проверок P0/P1/P2 + шаблон SEO-отчёта
|
|
280
|
+
measurement.md — GSC, Вебмастер, GA4/Метрика, KPI, UTM, мониторинг
|
|
281
|
+
assets/
|
|
282
|
+
snippets/ — готовые фрагменты: meta.blade.php; JSON-LD (организация, клиника,
|
|
283
|
+
MedicalWebPage, врач, FAQ, крошки); robots.txt; sitemap.xml
|
|
284
|
+
(sitemap-индекс) и sitemap-urlset-example.xml
|
|
285
|
+
README.md — как пользоваться сниппетами, статусы разметки в 2026, Битрикс
|
|
286
|
+
scripts/README.md — контракт инструмента seo-audit.mjs (делает qa-toolsmith, task-5):
|
|
287
|
+
`node seo-audit.mjs <file|url> --out dir [--json]`,
|
|
288
|
+
выход seo-audit.json/md, severity critical/serious/minor
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Инструмент `seo-audit.mjs` автоматизирует проверки из `references/audit-checklist.md` §13
|
|
292
|
+
(«Автоматизируемые проверки»). Пока его нет — проверяй вручную по гейту §3.
|
|
293
|
+
|
|
294
|
+
## 9. ОТЧЁТ (шаблон)
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
## SEO: <страница/задача>
|
|
298
|
+
Интент: <информационный/коммерческий/локальный> · кластер: <главный запрос + 3–5 поддерживающих>
|
|
299
|
+
Что сделано: <5–8 пунктов: title/desc, H1, canonical, JSON-LD, ссылки, alt, редиректы, sitemap>
|
|
300
|
+
Проверено: <валидатор rich results: 0 ошибок; 200 + index; robots/sitemap; CWV; curl/view-source>
|
|
301
|
+
Baseline: <если применимо — показы/клики/позиция/CTR до, дата>
|
|
302
|
+
Риски: <что может просесть и почему; какие P1/P2 отложены>
|
|
303
|
+
Что дальше: <следующие 1–3 шага: контент, перелинковка, ускорение, мониторинг>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## 10. ЕСЛИ ЗАДАЧА — «ПРОСТО СВЕРСТАТЬ / ПОПРАВИТЬ» (lite-режим)
|
|
307
|
+
|
|
308
|
+
Не разводи процесс на час. Сделай минимум **SEO-по-умолчанию** за 10 минут:
|
|
309
|
+
1. `title` + `description` + один `H1` по шаблону из §5.
|
|
310
|
+
2. `canonical` + `robots:index,follow` + OG-теги.
|
|
311
|
+
3. Семантика: `header/main/section/article/footer`, `lang="ru"`, заголовки по порядку.
|
|
312
|
+
4. `alt` у всех картинок, `width/height`, lazy ниже фолда.
|
|
313
|
+
5. Внутренние ссылки (2–4, осмысленные анкоры) + крошки, если страница не корневая.
|
|
314
|
+
6. JSON-LD минимального типа (`WebPage`/`Article`/`Physician`/`MedicalClinic`).
|
|
315
|
+
7. Прогнать мысленно гейт §3 и записать в отчёт, что проверено.
|
|
316
|
+
|
|
317
|
+
Если задача — **аудит** существующего сайта: сначала `references/audit-checklist.md`, фиксируй P0/P1/P2,
|
|
318
|
+
чини P0 (индексация, canonical, дубли, шаблоны title), только потом оптимизируй контент.
|
|
319
|
+
|
|
320
|
+
## 11. МЕДИЦИНА = YMYL (краткая памятка)
|
|
321
|
+
|
|
322
|
+
- Контент о здоровье влияет на жизнь человека → поисковики оценивают его строже (E-E-A-T), а ошибки бьют по
|
|
323
|
+
трафику и по репутации учреждения.
|
|
324
|
+
- Каждая медицинская страница: **автор-врач**, **рецензент** (если есть), **дата публикации и обновления**,
|
|
325
|
+
**источники**, **дисклеймер**, **показания/противопоказания**, **когда обращаться к врачу**.
|
|
326
|
+
- Не обещай результат («излечим», «гарантируем»), не запугивай, не подменяй очную консультацию.
|
|
327
|
+
- Локальная клиника: единый NAP, лицензия, Яндекс Бизнес/Карты + 2ГИС + GBP, отзывы с ответами, фото реальных
|
|
328
|
+
мест (не стоки).
|
|
329
|
+
- Подробно, с формулировками для example.org: `references/eeat-medical.md`.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# assets — что здесь лежит и как пользоваться
|
|
2
|
+
|
|
3
|
+
## Структура
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
assets/
|
|
7
|
+
snippets/
|
|
8
|
+
meta.blade.php — Blade-компонент <x-seo.meta> целиком (title/desc/canonical/robots/OG/Twitter/JSON-LD)
|
|
9
|
+
jsonld-organization.json — Organization + MedicalClinic (граф сайта, @id организации)
|
|
10
|
+
jsonld-medical-clinic.json — филиал/главный корпус (локальное SEO: адрес, geo, часы)
|
|
11
|
+
jsonld-medical-webpage.json — MedicalWebPage (услуга/статья: аудитория, специальность, рецензент, даты)
|
|
12
|
+
jsonld-physician.json — Physician + Person (профиль врача)
|
|
13
|
+
jsonld-faq.json — FAQPage (валидно, но rich results в Google отключены с 07.05.2026)
|
|
14
|
+
jsonld-breadcrumb.json — BreadcrumbList (совпадает с видимыми крошками)
|
|
15
|
+
robots.txt — эталон robots.txt для Битрикс-сайта + частые ошибки
|
|
16
|
+
sitemap.xml — sitemap-индекс (по разделам)
|
|
17
|
+
sitemap-urlset-example.xml — пример одного urlset с правилами
|
|
18
|
+
scripts/
|
|
19
|
+
README.md — контракт интерфейса для seo-audit.mjs (делает qa-toolsmith, task-5)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Правила использования
|
|
23
|
+
|
|
24
|
+
1. **Всё в snippets — эталоны, не «заливать как есть».** Везде плейсхолдеры: телефон `+7-495-000-00-00`,
|
|
25
|
+
адрес «ул. Новая, д. 12», лицензия `ЛО-77-01-000000`, geo, sameAs. Замените на реальные данные из
|
|
26
|
+
карточки организации/Яндекс Бизнеса — **один формат NAP по всему сайту**.
|
|
27
|
+
2. **JSON-файлы — чистый JSON** (без комментариев и висящих запятых), чтобы можно было сразу вставить
|
|
28
|
+
в `<script type="application/ld+json">` или прогнать валидатором. Пояснения — в `references/structured-data.md`
|
|
29
|
+
и в этом README.
|
|
30
|
+
3. **Один Organization на сайт.** Узел ставится на главной, на остальных страницах используется ссылка
|
|
31
|
+
`{"@id": "https://example.org/#organization"}`. Не дублируйте организацию с разными телефонами.
|
|
32
|
+
4. **Разметка = видимый контент.** Даты, цены, рейтинги, ФИО — только то, что есть на странице.
|
|
33
|
+
5. **Проверять после вставки:** https://search.google.com/test/rich-results и https://validator.schema.org.
|
|
34
|
+
6. **`medicalSpecialty`** — значения enum `MedicalSpecialty`: `Oncologic` (не `Oncology`), `Neurologic`,
|
|
35
|
+
`Cardiovascular`, `PrimaryCare`, `Radiography`, `Surgical`… Полный список — https://schema.org/MedicalSpecialty.
|
|
36
|
+
7. **Даты** — ISO 8601 (`2026-10-20`), время события — с часовым поясом (`2026-04-12T09:00:00+03:00`).
|
|
37
|
+
8. **URL** — абсолютные, https, тот же хост, что canonical/sitemap.
|
|
38
|
+
|
|
39
|
+
## Статусы разметки в Google на 2026
|
|
40
|
+
|
|
41
|
+
| Тип | Что даёт сейчас |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `BreadcrumbList` | крошки в сниппете на **десктопе** (на мобильных не показываются с 01.2025) |
|
|
44
|
+
| `Organization` / `MedicalOrganization` | данные организации для знания/логотипа, доверие |
|
|
45
|
+
| `MedicalClinic` / `LocalBusiness` | локальные данные; `aggregateRating` собственных отзывов в rich results не показывается |
|
|
46
|
+
| `Physician` | связывание сущности врач↔организация, данные для ИИ-ответов |
|
|
47
|
+
| `MedicalWebPage` | аудитория/специальность/рецензент/даты — сигналы E-E-A-T |
|
|
48
|
+
| `Article` / `NewsArticle` | расширенный сниппет статьи (дата, автор, изображение) |
|
|
49
|
+
| `FAQPage` | **rich results отключены 07.05.2026**; разметка валидна, помогает пониманию |
|
|
50
|
+
| `Event` | rich results для офлайн-событий (онлайн больше не поддерживается) |
|
|
51
|
+
| `HowTo`, `SpecialAnnouncement` | не использовать (удалены) |
|
|
52
|
+
|
|
53
|
+
## Битрикс/Aspro: как вставлять
|
|
54
|
+
|
|
55
|
+
- `meta.blade.php` — пример для Laravel; в Битриксе логика та же, но через
|
|
56
|
+
`$APPLICATION->SetPageProperty('title'|'description'|'canonical')` и `AddHeadString(...)`.
|
|
57
|
+
- JSON-LD вставляйте в `header.php` шаблона `local/templates/aspro-allcorp3medc/` (через `AddHeadString`)
|
|
58
|
+
или в шаблон компонента; данные берите из свойств инфоблока (`SEO_TITLE`, `SEO_DESCRIPTION`, `ADDRESS`,
|
|
59
|
+
`PHONE`, `LICENSE`), а не хардкодьте.
|
|
60
|
+
- `robots.txt` и `sitemap.xml` в Битриксе **генерируются модулем «Поисковая оптимизация»** — файлы здесь
|
|
61
|
+
нужны как эталон для сверки, а не для копирования поверх автогенерации.
|
|
62
|
+
|
|
63
|
+
## Скрипты
|
|
64
|
+
|
|
65
|
+
`scripts/` — место для инструмента `seo-audit.mjs` (делает qa-toolsmith, task-5). Контракт — в
|
|
66
|
+
`scripts/README.md`. Пока файла нет, проверяйте страницу вручную по `references/audit-checklist.md`.
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Portions Copyright (c) Microsoft Corporation.
|
|
190
|
+
Portions Copyright 2017 Google Inc.
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|