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,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "BreadcrumbList",
|
|
4
|
+
"@id": "https://example.org/uslugi/mrt-golovy/#breadcrumb",
|
|
5
|
+
"itemListElement": [
|
|
6
|
+
{
|
|
7
|
+
"@type": "ListItem",
|
|
8
|
+
"position": 1,
|
|
9
|
+
"name": "Главная",
|
|
10
|
+
"item": "https://example.org/"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"@type": "ListItem",
|
|
14
|
+
"position": 2,
|
|
15
|
+
"name": "Услуги",
|
|
16
|
+
"item": "https://example.org/uslugi/"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"@type": "ListItem",
|
|
20
|
+
"position": 3,
|
|
21
|
+
"name": "МРТ",
|
|
22
|
+
"item": "https://example.org/uslugi/mrt/"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"@type": "ListItem",
|
|
26
|
+
"position": 4,
|
|
27
|
+
"name": "МРТ головного мозга"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "FAQPage",
|
|
4
|
+
"@id": "https://example.org/uslugi/mrt-golovy/#faq",
|
|
5
|
+
"mainEntity": [
|
|
6
|
+
{
|
|
7
|
+
"@type": "Question",
|
|
8
|
+
"name": "Нужно ли направление врача на МРТ?",
|
|
9
|
+
"acceptedAnswer": {
|
|
10
|
+
"@type": "Answer",
|
|
11
|
+
"text": "При платном исследовании направление не обязательно. При прохождении по ОМС нужно направление лечащего врача. Результат МРТ действителен для консультации в организация."
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"@type": "Question",
|
|
16
|
+
"name": "Сколько длится МРТ головного мозга?",
|
|
17
|
+
"acceptedAnswer": {
|
|
18
|
+
"@type": "Answer",
|
|
19
|
+
"text": "Исследование без контрастирования занимает 20–30 минут, с контрастированием — до 45 минут. Результат выдаётся в день исследования."
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"@type": "Question",
|
|
24
|
+
"name": "Есть ли противопоказания к МРТ?",
|
|
25
|
+
"acceptedAnswer": {
|
|
26
|
+
"@type": "Answer",
|
|
27
|
+
"text": "Абсолютные противопоказания: кардиостимулятор, металлические импланты, ферромагнитные осколки, беременность I триместра. Перед исследованием врач уточняет анамнез и заполняет анкету безопасности."
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"@type": "Question",
|
|
32
|
+
"name": "Как подготовиться к МРТ головного мозга?",
|
|
33
|
+
"acceptedAnswer": {
|
|
34
|
+
"@type": "Answer",
|
|
35
|
+
"text": "Специальная подготовка не требуется. При контрастировании исследование проводится натощак (не есть 4–6 часов). Возьмите с собой результаты предыдущих исследований и документы."
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "MedicalClinic",
|
|
4
|
+
"@id": "https://example.org/kontakty/#clinic",
|
|
5
|
+
"name": "организация — главный корпус",
|
|
6
|
+
"url": "https://example.org/kontakty/",
|
|
7
|
+
"image": "https://example.org/upload/building-1200x630.jpg",
|
|
8
|
+
"telephone": "+7-495-000-00-00",
|
|
9
|
+
"priceRange": "₽₽",
|
|
10
|
+
"currenciesAccepted": "RUB",
|
|
11
|
+
"paymentAccepted": "Наличные, банковская карта, ОМС, ДМС",
|
|
12
|
+
"address": {
|
|
13
|
+
"@type": "PostalAddress",
|
|
14
|
+
"streetAddress": "ул. Новая, д. 12",
|
|
15
|
+
"addressLocality": "Москва",
|
|
16
|
+
"addressRegion": "Москва",
|
|
17
|
+
"postalCode": "105005",
|
|
18
|
+
"addressCountry": "RU"
|
|
19
|
+
},
|
|
20
|
+
"geo": {
|
|
21
|
+
"@type": "GeoCoordinates",
|
|
22
|
+
"latitude": 55.7654,
|
|
23
|
+
"longitude": 37.6543
|
|
24
|
+
},
|
|
25
|
+
"hasMap": "https://yandex.ru/maps/org/00000000000",
|
|
26
|
+
"openingHoursSpecification": [
|
|
27
|
+
{
|
|
28
|
+
"@type": "OpeningHoursSpecification",
|
|
29
|
+
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
|
30
|
+
"opens": "08:00",
|
|
31
|
+
"closes": "20:00"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"@type": "OpeningHoursSpecification",
|
|
35
|
+
"dayOfWeek": ["Saturday"],
|
|
36
|
+
"opens": "09:00",
|
|
37
|
+
"closes": "15:00"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"medicalSpecialty": ["Cardiovascular", "Oncologic", "Neurologic", "PrimaryCare"],
|
|
41
|
+
"isAcceptingNewPatients": true,
|
|
42
|
+
"parentOrganization": {
|
|
43
|
+
"@id": "https://example.org/#organization"
|
|
44
|
+
},
|
|
45
|
+
"sameAs": [
|
|
46
|
+
"https://yandex.ru/maps/org/00000000000",
|
|
47
|
+
"https://2gis.ru/moscow/firm/000000000000000"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": "MedicalWebPage",
|
|
4
|
+
"@id": "https://example.org/uslugi/mrt-golovy/#webpage",
|
|
5
|
+
"url": "https://example.org/uslugi/mrt-golovy/",
|
|
6
|
+
"name": "МРТ головного мозга: показания, подготовка, цена",
|
|
7
|
+
"description": "Как проходит МРТ головного мозга, кому показано, как подготовиться, сколько стоит в организация.",
|
|
8
|
+
"inLanguage": "ru-RU",
|
|
9
|
+
"isPartOf": {
|
|
10
|
+
"@id": "https://example.org/#website"
|
|
11
|
+
},
|
|
12
|
+
"about": {
|
|
13
|
+
"@type": "MedicalCondition",
|
|
14
|
+
"name": "Заболевания головного мозга"
|
|
15
|
+
},
|
|
16
|
+
"mainContentOfPage": {
|
|
17
|
+
"@type": "WebPageElement"
|
|
18
|
+
},
|
|
19
|
+
"medicalAudience": "https://schema.org/Patient",
|
|
20
|
+
"specialty": "https://schema.org/Neurologic",
|
|
21
|
+
"datePublished": "2025-02-10",
|
|
22
|
+
"dateModified": "2026-10-20",
|
|
23
|
+
"lastReviewed": "2026-10-20",
|
|
24
|
+
"reviewedBy": {
|
|
25
|
+
"@type": "Physician",
|
|
26
|
+
"name": "Петров Сергей Николаевич",
|
|
27
|
+
"jobTitle": "Врач-рентгенолог",
|
|
28
|
+
"url": "https://example.org/vrachi/petrov-sergey/"
|
|
29
|
+
},
|
|
30
|
+
"breadcrumb": {
|
|
31
|
+
"@id": "https://example.org/uslugi/mrt-golovy/#breadcrumb"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": ["MedicalOrganization", "MedicalClinic"],
|
|
4
|
+
"@id": "https://example.org/#organization",
|
|
5
|
+
"name": "Городская клиническая больница №31",
|
|
6
|
+
"alternateName": "организация",
|
|
7
|
+
"url": "https://example.org/",
|
|
8
|
+
"logo": {
|
|
9
|
+
"@type": "ImageObject",
|
|
10
|
+
"@id": "https://example.org/#logo",
|
|
11
|
+
"url": "https://example.org/upload/logo-512.png",
|
|
12
|
+
"width": 512,
|
|
13
|
+
"height": 512,
|
|
14
|
+
"caption": "организация"
|
|
15
|
+
},
|
|
16
|
+
"image": "https://example.org/upload/building-1200x630.jpg",
|
|
17
|
+
"description": "Многопрофильная больница в Москве: консультации врачей, диагностика, стационарное лечение.",
|
|
18
|
+
"telephone": "+7-495-000-00-00",
|
|
19
|
+
"email": "info@example.org",
|
|
20
|
+
"address": {
|
|
21
|
+
"@type": "PostalAddress",
|
|
22
|
+
"streetAddress": "ул. Новая, д. 12",
|
|
23
|
+
"addressLocality": "Москва",
|
|
24
|
+
"addressRegion": "Москва",
|
|
25
|
+
"postalCode": "105005",
|
|
26
|
+
"addressCountry": "RU"
|
|
27
|
+
},
|
|
28
|
+
"geo": {
|
|
29
|
+
"@type": "GeoCoordinates",
|
|
30
|
+
"latitude": 55.7654,
|
|
31
|
+
"longitude": 37.6543
|
|
32
|
+
},
|
|
33
|
+
"openingHoursSpecification": [
|
|
34
|
+
{
|
|
35
|
+
"@type": "OpeningHoursSpecification",
|
|
36
|
+
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
|
37
|
+
"opens": "08:00",
|
|
38
|
+
"closes": "20:00"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"@type": "OpeningHoursSpecification",
|
|
42
|
+
"dayOfWeek": ["Saturday"],
|
|
43
|
+
"opens": "09:00",
|
|
44
|
+
"closes": "15:00"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"areaServed": {
|
|
48
|
+
"@type": "City",
|
|
49
|
+
"name": "Москва"
|
|
50
|
+
},
|
|
51
|
+
"medicalSpecialty": ["Cardiovascular", "Oncologic", "Neurologic", "PrimaryCare"],
|
|
52
|
+
"isAcceptingNewPatients": true,
|
|
53
|
+
"sameAs": [
|
|
54
|
+
"https://vk.com/service-desk",
|
|
55
|
+
"https://t.me/service-desk",
|
|
56
|
+
"https://yandex.ru/maps/org/00000000000",
|
|
57
|
+
"https://2gis.ru/moscow/firm/000000000000000"
|
|
58
|
+
],
|
|
59
|
+
"contactPoint": [
|
|
60
|
+
{
|
|
61
|
+
"@type": "ContactPoint",
|
|
62
|
+
"contactType": "registratura",
|
|
63
|
+
"telephone": "+7-495-000-00-00",
|
|
64
|
+
"areaServed": "RU",
|
|
65
|
+
"availableLanguage": "ru"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"hasCredential": {
|
|
69
|
+
"@type": "EducationalOccupationalCredential",
|
|
70
|
+
"credentialCategory": "Лицензия на осуществление медицинской деятельности",
|
|
71
|
+
"identifier": "ЛО-77-01-000000",
|
|
72
|
+
"validFrom": "2024-01-15"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@type": ["Physician", "Person"],
|
|
4
|
+
"@id": "https://example.org/vrachi/ivanov-ivan/#physician",
|
|
5
|
+
"name": "Иванов Иван Иванович",
|
|
6
|
+
"jobTitle": "Врач-кардиолог",
|
|
7
|
+
"description": "Кардиолог, кандидат медицинских наук. Диагностика и лечение артериальной гипертензии, ИБС, нарушений ритма.",
|
|
8
|
+
"url": "https://example.org/vrachi/ivanov-ivan/",
|
|
9
|
+
"image": "https://example.org/upload/vrachi/ivanov-ivan.jpg",
|
|
10
|
+
"telephone": "+7-495-000-00-01",
|
|
11
|
+
"medicalSpecialty": "https://schema.org/Cardiovascular",
|
|
12
|
+
"availableService": [
|
|
13
|
+
{
|
|
14
|
+
"@type": "MedicalProcedure",
|
|
15
|
+
"name": "Электрокардиография (ЭКГ)"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"@type": "MedicalProcedure",
|
|
19
|
+
"name": "Эхокардиография"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"@type": "MedicalProcedure",
|
|
23
|
+
"name": "Холтеровское мониторирование ЭКГ"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"worksFor": {
|
|
27
|
+
"@id": "https://example.org/#organization"
|
|
28
|
+
},
|
|
29
|
+
"hospitalAffiliation": {
|
|
30
|
+
"@id": "https://example.org/#organization"
|
|
31
|
+
},
|
|
32
|
+
"alumniOf": {
|
|
33
|
+
"@type": "CollegeOrUniversity",
|
|
34
|
+
"name": "Российский национальный исследовательский медицинский университет им. Н. И. Пирогова"
|
|
35
|
+
},
|
|
36
|
+
"memberOf": {
|
|
37
|
+
"@type": "Organization",
|
|
38
|
+
"name": "Российское кардиологическое общество"
|
|
39
|
+
},
|
|
40
|
+
"knowsAbout": [
|
|
41
|
+
"Артериальная гипертензия",
|
|
42
|
+
"Ишемическая болезнь сердца",
|
|
43
|
+
"Нарушения ритма сердца"
|
|
44
|
+
],
|
|
45
|
+
"isAcceptingNewPatients": true
|
|
46
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{{--
|
|
2
|
+
SEO-мета для Laravel/Blade — компонент <x-seo.meta :seo="$seo" />
|
|
3
|
+
Использование:
|
|
4
|
+
$seo = \App\Support\Seo\Seo::page(
|
|
5
|
+
title: 'МРТ головного мозга в организация — цена от 4 500 ₽',
|
|
6
|
+
description: 'МРТ головы на аппарате 1.5 Тл: расшифровка врачом, результат в день исследования. Запись онлайн.',
|
|
7
|
+
path: '/uslugi/mrt-golovy/',
|
|
8
|
+
)->breadcrumbs([...])->addJsonLd([...]);
|
|
9
|
+
|
|
10
|
+
В шаблоне: <x-seo.meta :seo="$seo" />
|
|
11
|
+
|
|
12
|
+
Требует: config/seo.php (org_name, org_phone, addr_*, same_as, default_title,
|
|
13
|
+
default_description, default_og_image, canonical_host).
|
|
14
|
+
ВАЖНО: JSON-LD выводится с JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP.
|
|
15
|
+
--}}
|
|
16
|
+
@props(['seo' => null])
|
|
17
|
+
|
|
18
|
+
@php
|
|
19
|
+
$seo = $seo ?? \App\Support\Seo\Seo::page(
|
|
20
|
+
config('seo.default_title'),
|
|
21
|
+
config('seo.default_description')
|
|
22
|
+
);
|
|
23
|
+
$data = is_array($seo) ? $seo : $seo->toArray();
|
|
24
|
+
|
|
25
|
+
$title = $data['title'] ?? config('seo.default_title');
|
|
26
|
+
$description = $data['description'] ?? config('seo.default_description');
|
|
27
|
+
$canonical = $data['canonical'] ?? url()->current();
|
|
28
|
+
$robots = $data['robots'] ?? 'index,follow';
|
|
29
|
+
$type = $data['type'] ?? 'website';
|
|
30
|
+
$ogImage = $data['ogImage'] ?? config('seo.default_og_image');
|
|
31
|
+
$jsonLd = array_values(array_filter($data['jsonLd'] ?? []));
|
|
32
|
+
$orgName = config('seo.org_name');
|
|
33
|
+
@endphp
|
|
34
|
+
|
|
35
|
+
<title>{{ $title }}</title>
|
|
36
|
+
<meta name="description" content="{{ $description }}">
|
|
37
|
+
<meta name="robots" content="{{ $robots }}">
|
|
38
|
+
<link rel="canonical" href="{{ $canonical }}">
|
|
39
|
+
|
|
40
|
+
{{-- Open Graph: Telegram/WhatsApp/VK/соцсети --}}
|
|
41
|
+
<meta property="og:type" content="{{ $type }}">
|
|
42
|
+
<meta property="og:site_name" content="{{ $orgName }}">
|
|
43
|
+
<meta property="og:locale" content="ru_RU">
|
|
44
|
+
<meta property="og:title" content="{{ $title }}">
|
|
45
|
+
<meta property="og:description" content="{{ $description }}">
|
|
46
|
+
<meta property="og:url" content="{{ $canonical }}">
|
|
47
|
+
<meta property="og:image" content="{{ $ogImage }}">
|
|
48
|
+
<meta property="og:image:width" content="1200">
|
|
49
|
+
<meta property="og:image:height" content="630">
|
|
50
|
+
<meta property="og:image:alt" content="{{ $data['ogImageAlt'] ?? $title }}">
|
|
51
|
+
|
|
52
|
+
{{-- Twitter/X карточка --}}
|
|
53
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
54
|
+
<meta name="twitter:title" content="{{ $title }}">
|
|
55
|
+
<meta name="twitter:description" content="{{ $description }}">
|
|
56
|
+
<meta name="twitter:image" content="{{ $ogImage }}">
|
|
57
|
+
|
|
58
|
+
{{-- Структурированные данные --}}
|
|
59
|
+
@foreach ($jsonLd as $node)
|
|
60
|
+
<script type="application/ld+json">{!! json_encode($node, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP) !!}</script>
|
|
61
|
+
@endforeach
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# robots.txt — пример для example.org (1С-Битрикс + Aspro «Медицинский центр 3.0»)
|
|
2
|
+
# В Битриксе файл генерируется модулем «Поисковая оптимизация» (seo):
|
|
3
|
+
# Настройки → Настройки продукта → Настройки модулей → Поисковая оптимизация → robots.txt
|
|
4
|
+
# Этот файл — эталон для проверки результата. НЕ кладите его в корень поверх автогенерации,
|
|
5
|
+
# если авторежим включён. Проверка живого файла: https://example.org/robots.txt
|
|
6
|
+
#
|
|
7
|
+
# ПРИНЦИПЫ:
|
|
8
|
+
# - Закрываем только служебное: /bitrix/ (кроме нужных подпапок), /local/, /search/, /auth/, /personal/.
|
|
9
|
+
# - НЕ закрываем CSS/JS/картинки/шрифты — иначе робот не отрисует страницу.
|
|
10
|
+
# - НЕ закрываем услуги/врачей/статьи/цены — они должны ранжироваться.
|
|
11
|
+
# - UTM/сортировки/печать режем параметрами: Clean-param (Яндекс) + Disallow на параметры (Google).
|
|
12
|
+
# - Директиву Host Яндекс не использует с 2018 года — не пишите её.
|
|
13
|
+
# - Google игнорирует Crawl-delay и Clean-param; Яндекс понимает Clean-param.
|
|
14
|
+
|
|
15
|
+
User-agent: *
|
|
16
|
+
Disallow: /bitrix/
|
|
17
|
+
Disallow: /local/
|
|
18
|
+
Disallow: /search/
|
|
19
|
+
Disallow: /auth/
|
|
20
|
+
Disallow: /personal/
|
|
21
|
+
Disallow: /login/
|
|
22
|
+
Disallow: /*?sort=
|
|
23
|
+
Disallow: /*?print=
|
|
24
|
+
Disallow: /*?format=
|
|
25
|
+
Disallow: /*?view=
|
|
26
|
+
Disallow: /*?utm_
|
|
27
|
+
Disallow: /*?from=
|
|
28
|
+
Disallow: /*?callback=
|
|
29
|
+
Disallow: /*?clear_cache=
|
|
30
|
+
|
|
31
|
+
# Обход должен видеть шаблон, стили и скрипты — иначе рендеринг и Core Web Vitals страдают
|
|
32
|
+
Allow: /bitrix/js/
|
|
33
|
+
Allow: /bitrix/css/
|
|
34
|
+
Allow: /bitrix/templates/
|
|
35
|
+
Allow: /bitrix/components/
|
|
36
|
+
Allow: /local/templates/
|
|
37
|
+
Allow: /upload/
|
|
38
|
+
|
|
39
|
+
# Яндекс: не индексировать URL с этими параметрами (UTM, сортировки, пагинация-дубли)
|
|
40
|
+
Clean-param: utm_source&utm_medium&utm_campaign&utm_content&utm_term&yclid&gclid&from&sort&print /
|
|
41
|
+
|
|
42
|
+
# Опционально: закрыть служебные боты Яндекса от мусорных разделов
|
|
43
|
+
User-agent: Yandex
|
|
44
|
+
Disallow: /bitrix/
|
|
45
|
+
Disallow: /local/
|
|
46
|
+
Disallow: /search/
|
|
47
|
+
Disallow: /auth/
|
|
48
|
+
Disallow: /personal/
|
|
49
|
+
Disallow: /*?sort=
|
|
50
|
+
Clean-param: utm_source&utm_medium&utm_campaign&utm_content&utm_term&yclid&gclid /
|
|
51
|
+
|
|
52
|
+
Sitemap: https://example.org/sitemap.xml
|
|
53
|
+
|
|
54
|
+
# ---------------------------------------------------------------
|
|
55
|
+
# ЧАСТЫЕ ОШИБКИ:
|
|
56
|
+
# 1) Disallow: / — копия с тестового домена попала в прод (проверяй после каждого деплоя).
|
|
57
|
+
# 2) Disallow: /*?* — закрывает всё с параметрами, включая важные страницы; лучше точечно.
|
|
58
|
+
# 3) Disallow: /bitrix/ без Allow для js/css — робот не видит оформление.
|
|
59
|
+
# 4) Закрытие страницы в robots + noindex на ней — противоречие: страница не выйдет из индекса.
|
|
60
|
+
# 5) Sitemap с http:// или с www — не тот протокол/хост, чем канонический.
|
|
61
|
+
# ---------------------------------------------------------------
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
ПРИМЕР urlset (один файл карты) для example.org.
|
|
4
|
+
Только indexable URL: 200, без noindex, без редиректов.
|
|
5
|
+
<lastmod> — дата реального изменения контента (ISO 8601 / W3C).
|
|
6
|
+
<changefreq> и <priority> — подсказки; Google их игнорирует, Яндекс учитывает слабо.
|
|
7
|
+
Не ставь priority=1.0 всем страницам: это шум.
|
|
8
|
+
НЕ добавляй: страницы пагинации?page=N (кроме нужных), фильтры, /search/, UTM-копии,
|
|
9
|
+
служебные разделы, страницы «спасибо» и личный кабинет.
|
|
10
|
+
-->
|
|
11
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
12
|
+
<url>
|
|
13
|
+
<loc>https://example.org/</loc>
|
|
14
|
+
<lastmod>2026-11-01</lastmod>
|
|
15
|
+
<priority>1.0</priority>
|
|
16
|
+
</url>
|
|
17
|
+
<url>
|
|
18
|
+
<loc>https://example.org/napravleniya/</loc>
|
|
19
|
+
<lastmod>2026-10-30</lastmod>
|
|
20
|
+
<priority>0.9</priority>
|
|
21
|
+
</url>
|
|
22
|
+
<url>
|
|
23
|
+
<loc>https://example.org/napravleniya/kardiologiya/</loc>
|
|
24
|
+
<lastmod>2026-10-28</lastmod>
|
|
25
|
+
<priority>0.8</priority>
|
|
26
|
+
</url>
|
|
27
|
+
<url>
|
|
28
|
+
<loc>https://example.org/uslugi/</loc>
|
|
29
|
+
<lastmod>2026-10-30</lastmod>
|
|
30
|
+
<priority>0.9</priority>
|
|
31
|
+
</url>
|
|
32
|
+
<url>
|
|
33
|
+
<loc>https://example.org/uslugi/mrt-golovy/</loc>
|
|
34
|
+
<lastmod>2026-10-20</lastmod>
|
|
35
|
+
<priority>0.8</priority>
|
|
36
|
+
</url>
|
|
37
|
+
<url>
|
|
38
|
+
<loc>https://example.org/uslugi/mrt/</loc>
|
|
39
|
+
<lastmod>2026-10-20</lastmod>
|
|
40
|
+
<priority>0.7</priority>
|
|
41
|
+
</url>
|
|
42
|
+
<url>
|
|
43
|
+
<loc>https://example.org/vrachi/</loc>
|
|
44
|
+
<lastmod>2026-10-28</lastmod>
|
|
45
|
+
<priority>0.8</priority>
|
|
46
|
+
</url>
|
|
47
|
+
<url>
|
|
48
|
+
<loc>https://example.org/vrachi/ivanov-ivan/</loc>
|
|
49
|
+
<lastmod>2026-09-12</lastmod>
|
|
50
|
+
<priority>0.7</priority>
|
|
51
|
+
</url>
|
|
52
|
+
<url>
|
|
53
|
+
<loc>https://example.org/blog/</loc>
|
|
54
|
+
<lastmod>2026-10-15</lastmod>
|
|
55
|
+
<priority>0.7</priority>
|
|
56
|
+
</url>
|
|
57
|
+
<url>
|
|
58
|
+
<loc>https://example.org/blog/vysokoe-davlenie/</loc>
|
|
59
|
+
<lastmod>2026-10-18</lastmod>
|
|
60
|
+
<priority>0.6</priority>
|
|
61
|
+
</url>
|
|
62
|
+
<url>
|
|
63
|
+
<loc>https://example.org/novosti/den-otkrytyh-dverey-2026-04-12/</loc>
|
|
64
|
+
<lastmod>2026-04-12</lastmod>
|
|
65
|
+
<priority>0.5</priority>
|
|
66
|
+
</url>
|
|
67
|
+
<url>
|
|
68
|
+
<loc>https://example.org/kontakty/</loc>
|
|
69
|
+
<lastmod>2026-10-01</lastmod>
|
|
70
|
+
<priority>0.6</priority>
|
|
71
|
+
</url>
|
|
72
|
+
</urlset>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
ПРИМЕР sitemap-индекса для example.org (большой сайт: услуги/врачи/статьи/новости отдельно).
|
|
4
|
+
Если сайт небольшой (<50 000 URL) — можно один urlset без индекса:
|
|
5
|
+
см. sitemap-urlset-example.xml.
|
|
6
|
+
Требования:
|
|
7
|
+
• только URL с ответом 200 и без noindex;
|
|
8
|
+
• lastmod — реальная дата изменения (не «сегодня» у всех);
|
|
9
|
+
• ≤50 000 URL и ≤50 МБ на файл;
|
|
10
|
+
• карта должна быть доступна по https://example.org/sitemap.xml и указана в robots.txt;
|
|
11
|
+
• отправить в GSC и Яндекс Вебмастер.
|
|
12
|
+
В Битриксе генерируется модулем «Поисковая оптимизация» (Настройки модулей → sitemap.xml);
|
|
13
|
+
этот файл — эталон структуры, а не для ручной заливки поверх автогенерации.
|
|
14
|
+
-->
|
|
15
|
+
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
16
|
+
<sitemap>
|
|
17
|
+
<loc>https://example.org/sitemap-pages.xml</loc>
|
|
18
|
+
<lastmod>2026-10-20</lastmod>
|
|
19
|
+
</sitemap>
|
|
20
|
+
<sitemap>
|
|
21
|
+
<loc>https://example.org/sitemap-uslugi.xml</loc>
|
|
22
|
+
<lastmod>2026-11-01</lastmod>
|
|
23
|
+
</sitemap>
|
|
24
|
+
<sitemap>
|
|
25
|
+
<loc>https://example.org/sitemap-vrachi.xml</loc>
|
|
26
|
+
<lastmod>2026-10-28</lastmod>
|
|
27
|
+
</sitemap>
|
|
28
|
+
<sitemap>
|
|
29
|
+
<loc>https://example.org/sitemap-blog.xml</loc>
|
|
30
|
+
<lastmod>2026-10-15</lastmod>
|
|
31
|
+
</sitemap>
|
|
32
|
+
<sitemap>
|
|
33
|
+
<loc>https://example.org/sitemap-news.xml</loc>
|
|
34
|
+
<lastmod>2026-11-03</lastmod>
|
|
35
|
+
</sitemap>
|
|
36
|
+
</sitemapindex>
|