Skip to main content
Назад к блогу
5 мин чтения

Schema.org для сервисного бизнеса: JSON-LD, который должен быть в каждом портфолио

Большинство портфолио разработчиков шипят ноль структурированных данных. Вот 4 блока JSON-LD, которые помогают Google понять сервисный бизнес — с копипаст-кодом для Next.js.

performancenext.js

У большинства портфолио разработчиков есть title-тег, может мета-описание, и ноль структурированных данных. Google может прочитать страницу, но не понимает её. Не знает, что ты сервисный бизнес, сколько берёшь, где работаешь, что говорили прошлые клиенты.

JSON-LD исправляет это. Это скрипт-блок в <head>, который говорит поисковикам, о чём именно страница, в формате, который они могут разобрать.

Вот 4 блока JSON-LD, которые должно шипить каждое сервисное портфолио, с кодом для Next.js, который можно копировать.

1. ProfessionalService — кто ты

Это фундамент. Говорит Google, что ты — сервисный бизнес, а не блог или интернет-магазин.

// app/layout.tsx или общий компонент
const businessSchema = {
  '@context': 'https://schema.org',
  '@type': 'ProfessionalService',
  name: 'Твоё Имя — Full-Stack Разработчик',
  url: 'https://yoursite.com',
  logo: 'https://yoursite.com/logo.png',
  image: 'https://yoursite.com/og-image.jpg',
  description:
    'Full-stack разработка для стартапов. Next.js, React Native, интеграция Stripe.',
  address: {
    '@type': 'PostalAddress',
    addressLocality: 'Bratislava',
    addressCountry: 'SK',
  },
  geo: {
    '@type': 'GeoCoordinates',
    latitude: 48.1486,
    longitude: 17.1077,
  },
  priceRange: '€€',
  areaServed: {
    '@type': 'GeoCircle',
    geoMidpoint: {
      '@type': 'GeoCoordinates',
      latitude: 48.85,
      longitude: 2.35,
    },
    geoRadius: '3000 km',
  },
  knowsLanguage: ['en', 'ru', 'uk'],
  sameAs: [
    'https://github.com/yourusername',
    'https://linkedin.com/in/yourusername',
  ],
}

Почему важно: Google использует ProfessionalService для заполнения панелей знаний и результатов локального бизнеса. Даже если работаешь удалённо, поле areaServed сообщает Google охват рынка.

Частая ошибка: Использование Organization вместо ProfessionalService. Organization слишком общий — Google не может вывести, что ты продаёшь услуги.

2. Service — что продаёшь

Один блок Service на каждую услугу. Будь конкретен — «MVP Development» конвертит лучше в поиске, чем «Web Development».

const serviceSchema = {
  '@context': 'https://schema.org',
  '@type': 'Service',
  serviceType: 'MVP Development',
  provider: {
    '@type': 'ProfessionalService',
    name: 'Твоё Имя',
    url: 'https://yoursite.com',
  },
  areaServed: 'Europe',
  description:
    'Полный цикл разработки MVP для стартапов. От скоупинга до запуска за 12 недель.',
  offers: {
    '@type': 'Offer',
    priceCurrency: 'EUR',
    price: '8000',
    priceSpecification: {
      '@type': 'PriceSpecification',
      minPrice: '8000',
      maxPrice: '25000',
      priceCurrency: 'EUR',
    },
  },
}

Почему важно: Схема Service может тригерить rich-сниппеты с информацией о ценах в результатах поиска. Для low-funnel запросов типа «MVP developer Europe price» — это высокоценная территория.

Совет: Если несколько услуг (веб-приложение, мобильное, консалтинг) — создай отдельные блоки Service. Не сваливай всё в один.

3. Review / AggregateRating — социальное доказательство

Если на сайте есть отзывы — размечай их. Google может показывать рейтинг звёздами в результатах поиска для сервисного бизнеса.

const reviewSchema = {
  '@context': 'https://schema.org',
  '@type': 'ProfessionalService',
  name: 'Твоё Имя',
  aggregateRating: {
    '@type': 'AggregateRating',
    ratingValue: '5',
    reviewCount: '12',
    bestRating: '5',
  },
  review: [
    {
      '@type': 'Review',
      author: { '@type': 'Person', name: 'Имя Клиента' },
      datePublished: '2026-03-15',
      reviewBody:
        'Зашипили наш MVP за 10 недель. Чистый код, ясная коммуникация, без сюрпризов.',
      reviewRating: { '@type': 'Rating', ratingValue: '5', bestRating: '5' },
    },
  ],
}

Важно: Размечай только реальные отзывы от реальных клиентов. Google штрафует за фабрикованные отзывы. Если есть 3 настоящих — размечай 3, не 30.

Где размещать: На странице, где отзывы реально отображаются. Не добавляй review-схему на страницы без отзывов — Google считает это обманом.

4. Article — для блог-постов

Если есть блог (а он должен быть) — каждый пост должен иметь Article-схему.

const articleSchema = {
  '@context': 'https://schema.org',
  '@type': 'Article',
  headline: post.title,
  description: post.description,
  datePublished: post.date,
  dateModified: post.date,
  author: {
    '@type': 'Person',
    name: 'Твоё Имя',
    url: 'https://yoursite.com',
  },
  publisher: {
    '@type': 'ProfessionalService',
    name: 'Твоё Имя',
    logo: { '@type': 'ImageObject', url: 'https://yoursite.com/logo.png' },
  },
  mainEntityOfPage: {
    '@type': 'WebPage',
    '@id': `https://yoursite.com/blog/${post.slug}`,
  },
}

Почему важно: Article-схема помогает Google понять свежесть контента (через dateModified), авторство и тему. Может тригерить rich-результаты с датами публикации и информацией об авторе в поиске.

Как добавить JSON-LD в Next.js

В App Router добавь <script> тег в layout или page:

export default function Layout({ children }) {
  return (
    <html>
      <head>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{
            __html: JSON.stringify(businessSchema),
          }}
        />
      </head>
      <body>{children}</body>
    </html>
  )
}

Для страничной схемы (статьи, услуги) добавляй скрипт-блок в компоненте страницы, не в layout:

export default function BlogPost({ post }) {
  const articleSchema = {
    /* ... */
  }

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify(articleSchema),
        }}
      />
      <article>{/* контент поста */}</article>
    </>
  )
}

Валидация

После добавления JSON-LD — валидируй:

  1. Google Rich Results Test — показывает, подходит ли схема для rich-результатов
  2. Schema.org Validator — проверяет структурную корректность
  3. Google Search Console — после индексации проверь раздел «Улучшения» на ошибки схемы

Запускай валидацию после каждого изменения схемы. Пропущенная запятая в JSON-LD тихо ломает весь блок — никакой ошибки при рантайме, просто нет структурированных данных.

Чем не стоит заморачиваться

Четыре блока: ProfessionalService, Service, Review, Article. Это вложение в schema.org, которое окупается для портфолио разработчика. Всё остальное — убывающая отдача.


Хочешь, чтобы структурированные данные были правильно настроены на сайте? Напиши — я шиплю технический SEO по умолчанию на каждом клиентском проекте.