У большинства портфолио разработчиков есть 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 — валидируй:
- Google Rich Results Test — показывает, подходит ли схема для rich-результатов
- Schema.org Validator — проверяет структурную корректность
- Google Search Console — после индексации проверь раздел «Улучшения» на ошибки схемы
Запускай валидацию после каждого изменения схемы. Пропущенная запятая в JSON-LD тихо ломает весь блок — никакой ошибки при рантайме, просто нет структурированных данных.
Чем не стоит заморачиваться
- BreadcrumbList — полезен для e-commerce, избыточен для портфолио с 5 страницами.
- FAQ-схема — Google депремитирует FAQ rich-результаты. Не добавляй, если страница не является реально FAQ.
- HowTo-схема — для рецептных сайтов и туториалов, не для сервисного бизнеса.
Четыре блока: ProfessionalService, Service, Review, Article. Это вложение в schema.org, которое окупается для портфолио разработчика. Всё остальное — убывающая отдача.
Хочешь, чтобы структурированные данные были правильно настроены на сайте? Напиши — я шиплю технический SEO по умолчанию на каждом клиентском проекте.