seo + press V2

This commit is contained in:
2026-07-29 16:35:56 +02:00
parent e73075cdbc
commit 914e312a1b
18 changed files with 1030 additions and 739 deletions

View File

@@ -5,7 +5,8 @@ import { Video, Shield, Zap, Smartphone, Users, Download, Share2 } from 'lucide-
import { QRCodeSVG } from 'qrcode.react';
import { ToolBreadcrumb } from '@/components/seo/BreadcrumbSchema';
import { RelatedTools } from '@/components/marketing/RelatedTools';
import { generateSoftwareAppSchema, generateFaqSchema } from '@/lib/schema-utils';
import sanitizeHtml from 'sanitize-html';
import { generateSoftwareAppSchema } from '@/lib/schema-utils';
// SEO Optimized Metadata
export const metadata: Metadata = {
@@ -35,6 +36,32 @@ export const metadata: Metadata = {
},
};
// Single source of truth for FAQs: rendered on the page AND emitted as
// FAQPage schema. Google requires every marked-up Q&A to be visible to the
// user on the source page, so never add one without the other.
const faqItems = [
{
question: 'What happens when someone scans the QR code?',
answer: 'The Zoom app opens directly with your meeting ID and passcode pre-filled. They just tap "Join" to enter the meeting.',
},
{
question: 'Does it work for recurring meetings?',
answer: 'Yes! If your recurring meeting uses a fixed Personal Meeting ID (PMI), the QR code will work for all sessions.',
},
{
question: 'What if the meeting ID changes?',
answer: 'Static QR codes cannot be updated. You\\\'ll need to generate a new code. For changeable meetings, consider our Dynamic QR Codes.',
},
{
question: 'Does it work on all devices?',
answer: 'Yes. The QR code works on iOS, Android, and can also open Zoom on desktop computers if the Zoom app is installed.',
},
{
question: 'Does it work without the Zoom app installed?',
answer: 'If \'Open Zoom app directly\' is unchecked, the QR links to join.zoom.us which works in any browser.',
},
];
// JSON-LD Structured Data
const jsonLd = {
'@context': 'https://schema.org',
@@ -77,24 +104,18 @@ const jsonLd = {
],
totalTime: 'PT30S',
},
generateFaqSchema({
'What happens when someone scans the QR code?': {
question: 'What happens when someone scans the QR code?',
answer: 'The Zoom app opens directly with your meeting ID and passcode pre-filled. They just tap "Join" to enter the meeting.',
},
'Does it work for recurring meetings?': {
question: 'Does it work for recurring meetings?',
answer: 'Yes! If your recurring meeting uses a fixed Personal Meeting ID (PMI), the QR code will work for all sessions.',
},
'What if the meeting ID changes?': {
question: 'What if the meeting ID changes?',
answer: 'Static QR codes cannot be updated. You\'ll need to generate a new code. For changeable meetings, consider our Dynamic QR Codes.',
},
'Does it work on all devices?': {
question: 'Does it work on all devices?',
answer: 'Yes. The QR code works on iOS, Android, and can also open Zoom on desktop computers if the Zoom app is installed.',
},
}),
{
'@type': 'FAQPage',
'@id': 'https://www.qrmaster.net/tools/zoom-qr-code#faq',
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer.replace(/<[^>]+>/g, ''),
},
})),
},
],
};
@@ -264,22 +285,13 @@ export default function ZoomQRCodePage() {
</p>
<div className="space-y-4">
<FaqItem
question="What happens when someone scans the QR code?"
answer="The Zoom app opens directly with your meeting ID and passcode pre-filled. They just tap 'Join' to enter the meeting."
/>
<FaqItem
question="Does it work for recurring meetings?"
answer="Yes! If your recurring meeting uses a fixed Personal Meeting ID (PMI), the QR code will work for all sessions."
/>
<FaqItem
question="What if the meeting ID changes?"
answer="Static QR codes cannot be updated. You'll need to generate a new code. For changeable meetings, consider our Dynamic QR Codes."
/>
<FaqItem
question="Does it work without the Zoom app installed?"
answer="If 'Open Zoom app directly' is unchecked, the QR links to join.zoom.us which works in any browser."
/>
{faqItems.map((item) => (
<FaqItem
key={item.question}
question={item.question}
answer={item.answer}
/>
))}
</div>
</div>
</section>
@@ -300,9 +312,14 @@ function FaqItem({ question, answer }: { question: string; answer: string }) {
</svg>
</span>
</summary>
<div className="text-slate-600 px-5 pb-5 pt-0 leading-relaxed text-sm">
{answer}
</div>
<div className="text-slate-600 px-5 pb-5 pt-0 leading-relaxed text-sm [&_a]:text-indigo-600 [&_a]:underline"
dangerouslySetInnerHTML={{
__html: sanitizeHtml(answer, {
allowedTags: ['p', 'strong', 'em', 'ul', 'ol', 'li', 'a', 'br', 'code'],
allowedAttributes: { a: ['href'] },
}),
}}
/>
</details>
);
}