Головна/React і Next.js/Блупринти/Performance & QA/Высококонверсионный лендинг с Core Web Vitals (LCP < 1.2s) и динамическим OpenGraph
До карток розділу «Performance & QA»
Performance & QA(ТЗ 7 из 10)
ТЗ: Высококонверсионный лендинг с Core Web Vitals (LCP < 1.2s) и динамическим OpenGraph
Performance & QA1 шагов • +5 XP

ТЗ: Высококонверсионный лендинг с Core Web Vitals (LCP < 1.2s) и динамическим OpenGraph

Инженерная спецификация бескомпромиссного лендинга: оптимизация Largest Contentful Paint до 1.2с, шрифты без CLS, динамические OG-картинки на Edge через Satori и микроразметка Schema.org.

~8 ч работыNext.js 16next/font/googlenext/image (AVIF/WebP)Satori (@vercel/og)Schema.org JSON-LDResource Preloading
+5 XP за шаг
Выполнено 0 из 1 шагов (0%)
Трудозатраты~8 рабочих часов
Фриланс вилка~$360 – $600 (€320 – €560)
Оценка веб-студии~$760 – $1,280 (€720 – €1200)

ТЗ заказчика (исходный бриф):

Каждые 100 мс задержки стоят нам процентов конверсии. Первый экран должен отображаться моментально, картинки отдаваться в формате AVIF, а при шеринге в Telegram и Twitter подтягиваться динамическая карточка с кастомным заголовком.
Ключевые требования:
  • •Оптимизация LCP изображения главного экрана через priority и sizes
  • •Самохостинг шрифтов через next/font с согласованием fallback метрик
  • •Генерация OpenGraph картинок на лету через opengraph-image.tsx и Edge Runtime
  • •Внедрение структурированных данных Schema.org (Product / Organization)
Ограничения проекта:
  • •CLS строго равен 0.000
  • •LCP на мобильных сетях 4G < 1.2 секунды
Критерии приёмки (KPI):
  • Lighthouse Performance Score = 100/100
  • Размер критического CSS первого экрана < 15 КБ

Пошаговое практическое руководство по ТЗ

Подробный разбор архитектуры, код реализации и советы эксперта по каждому этапу:

1
Этап 1 из 1

Генерация динамических OpenGraph изображений через ImageResponse

~45 минСредний

Практическое руководство:

Создать app/opengraph-image.tsx с рендерингом JSX в SVG через Satori и конвертацией в PNG на Edge рантайме.

Важные технические нюансы и подводные камни:

Размер генерируемого изображения должен быть строго 1200x630px для идеального отображения во всех соцсетях.

Архитектурная база (Почему выбрано такое решение):

ImageResponse компилирует JSX в легковесный PNG на Edge сервере за 40 мс без запуска тяжелого headless браузера Puppeteer.

Совет эксперта (Best Practice):

Кэшируйте сгенерированные OG-изображения на CDN заголовком Cache-Control: public, max-age=31536000, immutable.

Ожидаемый артефакт этапа:

Файл app/opengraph-image.tsx с брендированным шаблоном карточки.

TYPESCRIPT
// app/opengraph-image.tsx
import { ImageResponse } from 'next/og'

export const runtime = 'edge'
export const alt = 'Fullstack AI Lab Engineering Platform'
export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'

export default async function Image() {
  return new ImageResponse(
    (
      <div
        style={{
          height: '100%',
          width: '100%',
          display: 'flex',
          flexDirection: 'column',
          alignItems: 'flex-start',
          justifyContent: 'space-between',
          backgroundColor: '#0A0A0F',
          padding: '80px',
          fontFamily: 'sans-serif'
        }}
      >
        <div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}>
          <div style={{ width: '40px', height: '40px', borderRadius: '12px', background: 'linear-gradient(135deg, #8B5CF6, #06B6D4)' }} />
          <span style={{ color: '#F8FAFC', fontSize: '28px', fontWeight: 800 }}>Fullstack AI Lab</span>
        </div>

        <div style={{ display: 'flex', flexDirection: 'column', gap: '20px' }}>
          <span style={{ color: '#06B6D4', fontSize: '24px', fontWeight: 700, letterSpacing: '0.1em' }}>
            PRODUCTION BLUEPRINT
          </span>
          <span style={{ color: '#FFFFFF', fontSize: '56px', fontWeight: 900, lineHeight: 1.1 }}>
            Enterprise React 19 & Next.js 16 Архитектура
          </span>
        </div>

        <div style={{ display: 'flex', gap: '24px', color: '#94A3B8', fontSize: '20px' }}>
          <span>⚡ LCP &lt; 1.2s</span>
          <span>•</span>
          <span>🛡️ Zero CLS</span>
          <span>•</span>
          <span>⚛️ Server Components</span>
        </div>
      </div>
    ),
    { ...size }
  )
}

Типичные грабли на этом ТЗ

1 антипаттерна

Что сдаём клиенту (Deliverables)

Чек-лист сдачи
Динамический генератор OpenGraph на Satori
Безупречный показатель LCP < 1.2s
Семантическая разметка Schema.org