seo + press V2
This commit is contained in:
@@ -5,7 +5,8 @@ import { Type, Shield, Zap, Smartphone, FileText, QrCode, Download, Share2 } fro
|
||||
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,36 @@ 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: 'Is there a character limit?',
|
||||
answer: 'Yes, we recommend keeping it under 300 characters for optimal scanning. While QR codes can hold more, more text makes the code denser and harder to scan.',
|
||||
},
|
||||
{
|
||||
question: 'Do I need internet to scan a Text QR code?',
|
||||
answer: 'No. Text QR codes work completely offline. The text content is embedded directly into the QR code pattern.',
|
||||
},
|
||||
{
|
||||
question: 'Is my text private?',
|
||||
answer: 'Yes. This generator runs 100% in your browser. We do not store or see the text you type.',
|
||||
},
|
||||
{
|
||||
question: 'How do I scan a text QR code?',
|
||||
answer: 'Open your phone camera or a QR scanner app and point it at the code. The text will appear on your screen automatically.',
|
||||
},
|
||||
{
|
||||
question: 'Can I edit the text later?',
|
||||
answer: 'No, this is a static QR code. The text is permanent. If you need to change it, you must create a new QR code.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the text after printing?',
|
||||
answer: 'No. Static QR codes are permanent. If you need to change the text later, you must generate a new QR code. For editable content, you would need a Dynamic QR Code (which we also offer).',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +113,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Is there a character limit?': {
|
||||
question: 'Is there a character limit?',
|
||||
answer: 'Yes, we recommend keeping it under 300 characters for optimal scanning. While QR codes can hold more, more text makes the code denser and harder to scan.',
|
||||
},
|
||||
'Do I need internet to scan a Text QR code?': {
|
||||
question: 'Do I need internet to scan a Text QR code?',
|
||||
answer: 'No. Text QR codes work completely offline. The text content is embedded directly into the QR code pattern.',
|
||||
},
|
||||
'Is my text private?': {
|
||||
question: 'Is my text private?',
|
||||
answer: 'Yes. This generator runs 100% in your browser. We do not store or see the text you type.',
|
||||
},
|
||||
'How do I scan a text QR code?': {
|
||||
question: 'How do I scan a text QR code?',
|
||||
answer: 'Open your phone camera or a QR scanner app and point it at the code. The text will appear on your screen automatically.',
|
||||
},
|
||||
'Can I edit the text later?': {
|
||||
question: 'Can I edit the text later?',
|
||||
answer: 'No, this is a static QR code. The text is permanent. If you need to change it, you must create a new QR code.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/text-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -276,26 +297,13 @@ export default function TextQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="How do I scan a text QR code?"
|
||||
answer="Open your phone camera or a QR scanner app and point it at the code. The text will appear on your screen automatically."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is there a character limit?"
|
||||
answer="We recommend keeping it under 300 characters for the best scanning experience. Theoretically, QR codes can hold up to 4,296 characters, but the code becomes very complex and harder to scan with standard phone cameras."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Do I need internet to scan a Text QR code?"
|
||||
answer="No. Text QR codes are 'static' codes, meaning the data is encoded directly into the image pattern. You can scan and read them completely offline, making them perfect for remote locations or secure environments."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is my text private?"
|
||||
answer="Yes. We prioritize your privacy. The generation process happens entirely in your browser using JavaScript. Your text data is never sent to our servers or stored anywhere."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I change the text after printing?"
|
||||
answer="No. Static QR codes are permanent. If you need to change the text later, you must generate a new QR code. For editable content, you would need a Dynamic QR Code (which we also offer)."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -316,9 +324,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>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user