Add JSON-LD schemas: FAQ, HowTo, BlogPosting, Person, AggregateRating

- PricingPage: FAQPage schema from existing FAQ array
- HomePage: HowTo schema with 5-step process (Challenge Briefing → Scaling)
- BlogPostPage: BlogPosting schema with headline, dates, author, publisher
- AboutPage: Person schema for Vadym Samoilenko (CEO & Founder)
- index.html: LocalBusiness + AggregateRating schema (5.0/5, 5 reviews)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vadym Samoilenko 2026-03-18 21:37:21 +00:00
parent 2fb3fce608
commit a3040d9852
5 changed files with 123 additions and 0 deletions

View file

@ -136,6 +136,31 @@
}
}
</script>
<!-- Structured Data: LocalBusiness + AggregateRating -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "AImpress Ltd",
"url": "https://ai-impress.com",
"image": "https://ai-impress.com/logo/webclip-256x256.png",
"address": {
"@type": "PostalAddress",
"streetAddress": "Suite 6065 Unit 3a, 34-35 Hatton Garden",
"addressLocality": "London",
"postalCode": "EC1N 8DX",
"addressCountry": "GB"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5.0",
"reviewCount": "5",
"bestRating": "5",
"worstRating": "1"
}
}
</script>
</head>
<body>
<div id="root"></div>

View file

@ -158,6 +158,21 @@ const AboutPage = () => {
},
})}</script>
</Helmet>
<Helmet>
<script type="application/ld+json">{JSON.stringify({
'@context': 'https://schema.org',
'@type': 'Person',
name: 'Vadym Samoilenko',
jobTitle: 'CEO & Founder',
worksFor: {
'@type': 'Organization',
name: 'AImpress Ltd',
url: 'https://ai-impress.com',
},
image: 'https://ai-impress.com/founder-vadym.png',
sameAs: ['https://www.linkedin.com/in/vadym-samoilenko/'],
})}</script>
</Helmet>
{/* Hero */}
<section className="about-hero">

View file

@ -1,6 +1,7 @@
import { useState, useEffect } from 'react';
import { useParams, Link } from 'react-router-dom';
import { motion } from 'framer-motion';
import { Helmet } from 'react-helmet-async';
import SEO from '../components/SEO';
import { useTranslation } from '../i18n';
import type { BlogPostFull } from '../types/blog';
@ -72,6 +73,33 @@ const BlogPostPage: React.FC = () => {
image={post.coverImage || undefined}
type="article"
/>
<Helmet>
<script type="application/ld+json">{JSON.stringify({
'@context': 'https://schema.org',
'@type': 'BlogPosting',
headline: post.title,
description: post.excerpt || post.title,
datePublished: post.date,
image: post.coverImage || 'https://ai-impress.com/logo/webclip-256x256.png',
author: {
'@type': 'Organization',
name: 'AImpress Ltd',
url: 'https://ai-impress.com',
},
publisher: {
'@type': 'Organization',
name: 'AImpress Ltd',
logo: {
'@type': 'ImageObject',
url: 'https://ai-impress.com/logo/webclip-256x256.png',
},
},
mainEntityOfPage: {
'@type': 'WebPage',
'@id': `https://ai-impress.com/blog/${slug}`,
},
})}</script>
</Helmet>
<Link to="/blog" className="blog-post-back">{t('blogPost.back')}</Link>
{post.coverImage && (

View file

@ -1,3 +1,4 @@
import { Helmet } from 'react-helmet-async';
import SEO from '../components/SEO';
import Hero from '../components/Hero';
import Benefits from '../components/Benefits';
@ -14,6 +15,46 @@ const HomePage: React.FC = () => {
return (
<main>
<SEO />
<Helmet>
<script type="application/ld+json">{JSON.stringify({
'@context': 'https://schema.org',
'@type': 'HowTo',
name: 'How AImpress Automates Your Business',
description: 'Our proven 5-step process to implement AI and automation solutions for SMEs.',
step: [
{
'@type': 'HowToStep',
position: 1,
name: 'Challenge Briefing',
text: 'We start with a discovery call to understand your business challenges, goals, and current workflows.',
},
{
'@type': 'HowToStep',
position: 2,
name: 'Process Audit',
text: 'We map your existing processes to identify automation opportunities and calculate potential ROI.',
},
{
'@type': 'HowToStep',
position: 3,
name: 'Solution Design',
text: 'We design a tailored automation architecture using AI tools and platforms best suited to your needs.',
},
{
'@type': 'HowToStep',
position: 4,
name: 'Implementation',
text: 'We build and integrate your automation solutions, with full testing and quality assurance.',
},
{
'@type': 'HowToStep',
position: 5,
name: 'Scaling & Optimisation',
text: 'We monitor performance, train your team, and continuously optimise your automations for maximum impact.',
},
],
})}</script>
</Helmet>
<Hero />
<Benefits />
<Banner1 />

View file

@ -140,6 +140,20 @@ const PricingPage = () => {
},
})}</script>
</Helmet>
<Helmet>
<script type="application/ld+json">{JSON.stringify({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: faq.map(item => ({
'@type': 'Question',
name: item.q,
acceptedAnswer: {
'@type': 'Answer',
text: item.a,
},
})),
})}</script>
</Helmet>
{/* Hero */}
<section className="pricing-hero">