import { businessConfig } from "@/lib/seo-config"
interface Review {
author?: string
rating?: number
reviewBody?: string
datePublished?: string
}
interface ReviewSchemaProps {
aggregateRating?: {
ratingValue: number
reviewCount: number
bestRating?: number
worstRating?: number
}
reviews?: Review[]
}
/**
* Review Schema Component
* Implements AggregateRating and Review schema markup for SEO
* Based on review data from reputation hub and Google reviews
*/
export function ReviewSchema({ aggregateRating, reviews }: ReviewSchemaProps) {
if (!aggregateRating && (!reviews || reviews.length === 0)) {
return null
}
const structuredData: any = {
"@context": "https://schema.org",
"@type": "AggregateRating",
}
if (aggregateRating) {
structuredData.ratingValue = aggregateRating.ratingValue
structuredData.reviewCount = aggregateRating.reviewCount
structuredData.bestRating = aggregateRating.bestRating || 5
structuredData.worstRating = aggregateRating.worstRating || 1
}
// If we have individual reviews, create a full Review schema
if (reviews && reviews.length > 0) {
const reviewItems = reviews.map((review) => ({
"@type": "Review",
author: {
"@type": "Person",
name: review.author || "Customer",
},
reviewRating: review.rating
? {
"@type": "Rating",
ratingValue: review.rating,
bestRating: 5,
worstRating: 1,
}
: undefined,
reviewBody: review.reviewBody,
datePublished: review.datePublished,
}))
return (
<>
>
)
}
// Just aggregate rating
return (
)
}