Commit Graph

37 Commits

Author SHA1 Message Date
9f53641f16 seo: GA4, breadcrumbs JSON-LD, IndexNow post-deploy, llms.txt
- Add GA4 (G-C9J0D8FFH3) to root layout alongside Yandex.Metrika
- Add BreadcrumbList JSON-LD schema to all inner pages
- Add scripts/indexnow.mjs — submits 30 URLs to IndexNow + Yandex on deploy
- Add indexnow to postdeploy step in package.json
- Update llms.txt with all 8 services and new pages (about/clients/partners)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 04:04:50 +03:00
21596c278b seo: update sitemap — add about/clients/partners, EN service pages, x-default hreflang
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 03:52:48 +03:00
40250aa4a6 feat: separate About/Clients/Partners into individual pages
- /[lang]/about/ — О компании (AboutSection standalone)
- /[lang]/clients/ — Нам доверяют (ClientsSection standalone)
- /[lang]/partners/ — Партнёры (PartnersSection standalone)
- Remove /o-kompanii/ page
- Update Header nav with all three links
- Add clients/partners keys to ru/en dictionaries
- sections: standalone prop → h1 heading, adjusted padding

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 03:45:07 +03:00
925caef547 Reapply "feat: separate About/Clients/Partners into /o-kompanii/ page, add IndexNow meta"
This reverts commit 9b56fbb2b9.
2026-03-16 03:31:02 +03:00
9b56fbb2b9 Revert "feat: separate About/Clients/Partners into /o-kompanii/ page, add IndexNow meta"
This reverts commit 55981c14dd.
2026-03-16 03:30:18 +03:00
55981c14dd feat: separate About/Clients/Partners into /o-kompanii/ page, add IndexNow meta
- Create /[lang]/o-kompanii/ page with About, Clients, Partners sections
- Remove those sections from homepage (Hero + Services + FAQ remain)
- Update Header nav: "О нас" now links to /o-kompanii/ instead of /#about
- AboutSection: support standalone prop (h1 vs h2)
- Root layout: add indexnow-key meta tag (key from public/40c65b...txt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 03:17:39 +03:00
55f88d5227 SEO: JSON-LD, hreflang x-default, 404 page, localized OG
- FaqSection: h1/h2 based on standalone prop (fixes missing H1 on /faq)
- faq/page: FAQPage JSON-LD, hreflang x-default, OG image/url
- kontakty/page: LocalBusiness JSON-LD (address, geo, tel, openingHours), hreflang x-default, OG
- uslugi/page: geo in H1 («в Пушкино»), hreflang x-default, OG, expanded description
- [lang]/page: Organization JSON-LD, localized OG (ru_RU/en_US), x-default hreflang
- [slug]/page: localized og:title/siteName, x-default hreflang, areaServed+telephone in Service JSON-LD
- not-found.tsx: 404 page → generates 404.html for nginx error_page directive

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 00:56:47 +03:00
e223f51bd9 content: update hero title to 'IT-решения от А до Я'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 00:04:46 +03:00
fa9c5422c4 fix: replace tailwind.config.ts with .js for PostCSS compatibility
Tailwind v3 PostCSS plugin doesn't load TypeScript config files,
resulting in empty CSS output (no utility classes generated).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 22:44:08 +03:00
468f98a4b0 feat: update sitemap.xml for Next.js multi-page structure with hreflang
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 22:21:33 +03:00
a5043657fe fix: update lucide-react to ^0.468 for React 19 compatibility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 21:46:03 +03:00
a0ebac1544 feat: migrate to Next.js 15 App Router with i18n and multi-page SEO
- Replace Vite+React SPA with Next.js 15, TypeScript, App Router
- Static export (output: 'export'), deploy via npm run deploy
- i18n routing: /ru/... and /en/... with generateStaticParams
- New pages: /uslugi/ (catalog), /uslugi/[slug]/ (8 service pages), /faq/, /kontakty/
- SEO: generateMetadata on all pages, JSON-LD Service schema, hreflang alternates
- ContactForm: 'use client', Turnstile + POST to /api/contact.php
- Fonts: Manrope via next/font/google (CSS variable)
- Remove: vite.config.js, entry-server.jsx, prerender scripts, LanguageContext

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 21:19:18 +03:00
18fff2e3f6 feat: activate Cloudflare Turnstile for sag24.ru contact form
Set site key and secret key for sag24-website-contact-form widget

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 14:41:22 +03:00
c155ff366c feat: add Turnstile anti-bot, email field, and metadata to contact form
- Add Cloudflare Turnstile widget support (site key configurable in config.js,
  secret key in contact.php — both empty until widget created at dash.cloudflare.com)
- Add email input field to contact form (parity with hhivp)
- Add company length validation (200 chars) to contact.php
- Add IP, country (CF-IPCountry header), and referer metadata to Telegram notifications
- Add company and email fields to SMTP email body
- Turnstile script loaded in index.html, widget rendered conditionally when TURNSTILE_SITE_KEY is set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 14:20:23 +03:00
a42007e0a5 feat: add rate limiting and input validation to contact form
- Rate limit: 5 req/min per IP (file-based)
- Email format validation via filter_var
- Field length limits: name 100, email 254, phone 30, message 5000

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 07:29:27 +03:00
7decd512c9 fix: use Cloudflare Worker relay for Telegram, fix phone format
- contact.php: route Telegram API via tg-relay.it-resheniya-2018.workers.dev
- translations: fix phone format (909) 945-44-56 -> +7 909 945-44-56

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 05:59:18 +03:00
fc1d2c20cd fix: contact.php — SMTP via noreply@sag24.ru, Telegram best-effort
- Send email via SMTP AUTH to mx.hhivp.com using noreply@sag24.ru
- Telegram is non-fatal (ТСПУ blocks 45.10.53.x datacenter)
- Form always returns success as long as email is sent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 01:18:13 +03:00
cd265e4459 fix: contact form — email fallback + non-fatal Telegram
- Always send email to info@sag24.ru (via server mail())
- Return success even if Telegram is unreachable (ТСПУ blocks 45.10.53.x)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 01:15:23 +03:00
952634de3e feat: add Telegram relay endpoint for hhivp-website 2026-03-15 00:13:46 +03:00
a5dda1f2f3 fix: keep SSR build in dist/server, only client build goes to deploy target 2026-03-14 21:56:51 +03:00
aa6a972ce6 feat: add deploy script that builds directly to ../public_html 2026-03-14 21:55:04 +03:00
534bdd3bb5 fix: change phone +7 495 945-44-56 to (909) 945-44-56 2026-03-14 20:08:04 +03:00
9a3785a13c feat: add Telegram contact form API (PHP) and connect form endpoint 2026-03-14 19:41:25 +03:00
851dd6173b Комплексные улучшения: FAQ, форма, карта, WhatsApp/Telegram, SEO
- FloatingContacts: кнопки WhatsApp + Telegram (правый нижний угол)
- ScrollToTop: кнопка "наверх" (появляется после 400px скролла)
- FAQ секция: 6 вопросов с аккордеоном, id=faq в навбаре
- Hero: телефон под CTA кнопками
- Форма: поле телефона, реальная отправка (fetch FormSpree или mailto fallback)
- Яндекс.Карты embed в блоке контактов
- Navigation: убран дубль "Контакты" из links, добавлен FAQ
- img width/height на логотипах (антиCLS)
- JSON-LD: og-image.svg → .png, добавлен postalCode, уточнен streetAddress
- prerender.mjs: динамически обновляет хеш preload шрифта
- src/config.js: централизованный конфиг (WhatsApp, Telegram, form endpoint)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 05:54:19 +03:00
27169b6a65 Добавить секцию клиентов (15 компаний)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 05:33:11 +03:00
3cb42a4466 Добавить пререндер, партнёров, реквизиты, SEO-улучшения
- SSR-пререндер через Vite + react-dom/server (entry-server.jsx, scripts/prerender.mjs)
- Секция партнёров: RU-CENTER, REG.RU, МТВ, КОНТУР
- Реквизиты компании в футере (ИНН, ОГРН, банк)
- Копирайт с 2011 года
- Логотип увеличен (h-8→h-12 навбар, h-7→h-10 футер)
- favicon.ico пересобран с 16×16, 32×32, 48×48 из logo.png
- og:image и twitter:image переключены на .png
- apple-touch-icon.png и og-image.png сгенерированы через sharp
- SSR-safe: localStorage и window.location проверяются на typeof

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 05:24:01 +03:00
0804264d3b Navbar: always white, remove scroll effect 2026-03-14 02:33:52 +03:00
ba784bb5ec Add logo.png and favicon.ico, update nav/footer/JSON-LD 2026-03-14 02:06:56 +03:00
0f775d9d7c Fix address order: region first 2026-03-14 01:54:43 +03:00
7514864703 Update address to д. 38/14 2026-03-14 01:38:22 +03:00
8bfd0d7750 Add 404 page, three phone numbers, fix nginx try_files 2026-03-14 01:37:23 +03:00
fc4c2c6d07 SEO: OG, JSON-LD, hreflang, canonical, IndexNow, lang sync 2026-03-14 01:30:24 +03:00
e36e6150f6 Add sitemap.xml, robots.txt, llms.txt 2026-03-14 01:11:21 +03:00
cc85718138 Add Google Analytics (G-C9J0D8FFH3) 2026-03-14 01:09:11 +03:00
c7b124fc43 Add Yandex.Metrika counter (id: 13027513) 2026-03-14 01:07:22 +03:00
abff3fa4cc Initial commit: Сисадмингрупп website
React + Vite + Tailwind, RU/EN, Hero/Services/About/Contact sections
2026-03-14 01:02:02 +03:00
b3cb94d01b Initial commit 2026-03-14 00:57:29 +03:00