This commit is contained in:
Timo Knuth 2026-01-27 17:27:47 +01:00
parent 4dc7c29134
commit 1a6dc01291
5 changed files with 38 additions and 12 deletions

View File

@ -62,7 +62,7 @@ export default function HomePage() {
<SeoJsonLd data={[
websiteSchema(),
organizationSchema(),
softwareApplicationSchema(),
softwareApplicationSchema(aggregateRating),
aggregateRatingSchema(aggregateRating),
...reviewSchemas
]} />

View File

@ -79,8 +79,7 @@ export default function TestimonialsPage() {
{[...Array(5)].map((_, index) => (
<Star
key={index}
className={`w-8 h-8 ${
index < aggregateRating.ratingValue
className={`w-8 h-8 ${index < aggregateRating.ratingValue
? 'fill-yellow-400 text-yellow-400'
: 'fill-gray-200 text-gray-200'
}`}
@ -136,6 +135,8 @@ export default function TestimonialsPage() {
</div>
</div>
</section>
</div>
</>
);

View File

@ -35,6 +35,9 @@ export default function AdBanner({
'/terms',
'/cookie-policy',
'/impressum',
'/press',
'/testimonials',
'/authors',
];
// Check if current path matches strictly or starts with excluded path (for nested legal/blog pages if needed, though mostly exact matches here)

View File

@ -42,12 +42,12 @@ export function organizationSchema() {
sameAs: [
'https://twitter.com/qrmaster',
],
contactPoint: {
contactPoint: [{
'@type': 'ContactPoint',
contactType: 'Customer Support',
email: 'support@qrmaster.net',
availableLanguage: ['en', 'de'],
},
}],
};
}
@ -163,8 +163,8 @@ export function breadcrumbSchema(items: { name: string; url: string }[]) {
};
}
export function softwareApplicationSchema() {
return {
export function softwareApplicationSchema(aggregateRating?: AggregateRating) {
const schema: any = {
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: 'QR Master',
@ -179,6 +179,18 @@ export function softwareApplicationSchema() {
'@id': `${SITE_URL}/#organization`,
}
};
if (aggregateRating) {
schema.aggregateRating = {
'@type': 'AggregateRating',
ratingValue: aggregateRating.ratingValue,
reviewCount: aggregateRating.reviewCount,
bestRating: aggregateRating.bestRating,
worstRating: aggregateRating.worstRating
};
}
return schema;
}
export function authorPageSchema(author: AuthorProfile, posts?: BlogPost[]) {
@ -253,7 +265,12 @@ export function reviewSchema(testimonial: Testimonial) {
'@type': 'SoftwareApplication',
name: 'QR Master',
applicationCategory: 'BusinessApplication',
operatingSystem: 'Web Browser'
operatingSystem: 'Web Browser',
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'EUR'
}
},
reviewRating: {
'@type': 'Rating',
@ -276,6 +293,11 @@ export function aggregateRatingSchema(aggregateRating: AggregateRating) {
'@context': 'https://schema.org',
'@type': 'Product',
name: 'QR Master',
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'EUR'
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: aggregateRating.ratingValue,

View File

@ -30,7 +30,7 @@ export const testimonials: Testimonial[] = [
title: "Perfect for my pottery",
content: "I use QR-Master for my pottery as a link to my homepage and as a digital business card. I place the codes directly on my pottery pieces so interested customers can instantly access my website. Reliable and practical a great solution!",
author: {
name: "Claudia Knuth",
name: "Claudia",
company: "Hotshpotsh",
location: "Texas"
},