seo + press V2
This commit is contained in:
@@ -2,6 +2,7 @@ import { BookOpen, CheckCircle, TrendingUp } from 'lucide-react';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { FAQSection } from '@/components/aeo/FAQSection';
|
||||
import { barcodeFaqs } from './faqs';
|
||||
import { BarcodeFormatPicker } from './BarcodeFormatPicker';
|
||||
|
||||
export function BarcodeGuide() {
|
||||
@@ -348,40 +349,7 @@ export function BarcodeGuide() {
|
||||
<div className="not-prose">
|
||||
<FAQSection
|
||||
title="Frequently Asked Questions"
|
||||
items={[
|
||||
{
|
||||
question: 'What is a Barcode Generator?',
|
||||
answer: 'A Barcode Generator is an online tool that converts numbers or text into scannable barcode images that can be used for products, labels, and inventory systems.',
|
||||
},
|
||||
{
|
||||
question: 'Is this barcode generator free to use?',
|
||||
answer: 'Yes, our online barcode generator is completely free to use with no hidden costs or sign-ups required. You can generate, download, and print barcodes instantly.',
|
||||
},
|
||||
{
|
||||
question: 'Which barcode format should I use?',
|
||||
answer: '<strong>EAN-13</strong> is the standard for retail products in Europe and globally. <strong>UPC-A</strong> is the standard for retail products in USA/Canada. <strong>Code 128</strong> is best for logistics, shipping, and internal tracking as it supports both letters and numbers. Use the format picker above to find the right one for your use case.',
|
||||
},
|
||||
{
|
||||
question: 'Can I download barcodes in vector format (SVG)?',
|
||||
answer: 'Yes - SVG downloads are available. SVG files are vector-based, meaning they can be scaled to any size without losing quality. This is ideal for professional product packaging and labels.',
|
||||
},
|
||||
{
|
||||
question: 'How do I generate a barcode online?',
|
||||
answer: 'Enter your product number or text, select the desired barcode format (such as EAN-13 or Code 128), and the barcode is generated instantly. You can then download it as PNG or SVG.',
|
||||
},
|
||||
{
|
||||
question: 'Are generated barcodes scannable?',
|
||||
answer: 'Yes. We generate standard-compliant barcodes that are readable by any standard optical or laser barcode scanner, including smartphone camera apps.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use these barcodes for Amazon (EAN/UPC)?',
|
||||
answer: 'You can generate the barcode <em>image</em> here if you already have a valid EAN/UPC number. However, you cannot create a globally registered EAN/UPC number here - you must purchase official numbers from GS1 to list products on Amazon or in major retail systems.',
|
||||
},
|
||||
{
|
||||
question: 'What is the difference between a barcode and a QR code?',
|
||||
answer: 'A barcode stores data in one dimension (horizontal bars) and is mainly used for product identification. A QR code stores data in two dimensions (a matrix) and can hold much more information - URLs, contact details, WiFi credentials, and more.',
|
||||
},
|
||||
]}
|
||||
items={barcodeFaqs}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
73
src/app/(main)/(marketing)/tools/barcode-generator/faqs.ts
Normal file
73
src/app/(main)/(marketing)/tools/barcode-generator/faqs.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
// Single source of truth for the barcode generator FAQs.
|
||||
//
|
||||
// The visible FAQ block lives in BarcodeGuide.tsx while the FAQPage schema is
|
||||
// emitted from page.tsx. Both import this list so they can never drift apart —
|
||||
// Google requires every marked-up Q&A to be visible to the user on the source
|
||||
// page. Add a question here and it appears in both places automatically.
|
||||
//
|
||||
// Answers may contain inline HTML; the schema strips it, FAQSection sanitizes it.
|
||||
|
||||
export type BarcodeFaq = { question: string; answer: string };
|
||||
|
||||
export const barcodeFaqs: BarcodeFaq[] = [
|
||||
{
|
||||
question: 'What is a Barcode Generator?',
|
||||
answer:
|
||||
'A Barcode Generator is an online tool that converts numbers or text into scannable barcode images that can be used for products, labels, and inventory systems.',
|
||||
},
|
||||
{
|
||||
question: 'Is this barcode generator free to use?',
|
||||
answer:
|
||||
'Yes, our online barcode generator is completely free to use with no hidden costs or sign-ups required. You can generate, download, and print barcodes instantly.',
|
||||
},
|
||||
{
|
||||
question: 'Which barcode format should I use?',
|
||||
answer:
|
||||
'<strong>EAN-13</strong> is the standard for retail products in Europe and globally. <strong>UPC-A</strong> is the standard for retail products in USA/Canada. <strong>Code 128</strong> is best for logistics, shipping, and internal tracking as it supports both letters and numbers. Use the format picker above to find the right one for your use case.',
|
||||
},
|
||||
{
|
||||
question: 'What is the difference between EAN-13 and UPC-A?',
|
||||
answer:
|
||||
'EAN-13 (13 digits) is the international retail standard used in Europe, Asia, and globally. UPC-A (12 digits) is the North American retail standard used in the US and Canada. An EAN-13 barcode starting with a 0 is actually a UPC-A code - all UPC-A codes are a subset of EAN-13. Most modern POS scanners read both formats.',
|
||||
},
|
||||
{
|
||||
question: 'What barcode format do Amazon and Walmart require?',
|
||||
answer:
|
||||
'Amazon and Walmart require UPC-A (12 digits) for products sold in the United States and Canada, and EAN-13 (13 digits) for products sold internationally. You must purchase official GS1-registered numbers to sell on these platforms - you cannot self-generate valid retail UPC/EAN numbers.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use these barcodes for Amazon (EAN/UPC)?',
|
||||
answer:
|
||||
'You can generate the barcode <em>image</em> here if you already have a valid EAN/UPC number. However, you cannot create a globally registered EAN/UPC number here - you must purchase official numbers from GS1 to list products on Amazon or in major retail systems.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use Code 128 for inventory management?',
|
||||
answer:
|
||||
'Yes. Code 128 is the most widely used barcode format for inventory, logistics, and warehousing because it supports both letters and numbers, has high data density, and is readable by virtually all laser and 2D scanners. It is the recommended format for internal SKU systems, warehouse bin labels, and shipping labels.',
|
||||
},
|
||||
{
|
||||
question: 'What is the minimum print size for a scannable barcode?',
|
||||
answer:
|
||||
'The GS1 standard recommends a minimum width of 25.9mm (1 inch) for EAN-13 barcodes on retail packaging. Smaller sizes increase scan failure rates. For internal inventory labels, Code 128 can be printed as narrow as 15mm wide while remaining reliably scannable with modern handheld scanners.',
|
||||
},
|
||||
{
|
||||
question: 'How do I generate a barcode online?',
|
||||
answer:
|
||||
'Enter your product number or text, select the desired barcode format (such as EAN-13 or Code 128), and the barcode is generated instantly. You can then download it as PNG or SVG.',
|
||||
},
|
||||
{
|
||||
question: 'Can I download barcodes in vector format (SVG)?',
|
||||
answer:
|
||||
'Yes - SVG downloads are available. SVG files are vector-based, meaning they can be scaled to any size without losing quality. This is ideal for professional product packaging and labels.',
|
||||
},
|
||||
{
|
||||
question: 'Are generated barcodes scannable?',
|
||||
answer:
|
||||
'Yes. We generate standard-compliant barcodes that are readable by any standard optical or laser barcode scanner, including smartphone camera apps.',
|
||||
},
|
||||
{
|
||||
question: 'What is the difference between a barcode and a QR code?',
|
||||
answer:
|
||||
'A barcode stores data in one dimension (horizontal bars) and is mainly used for product identification. A QR code stores data in two dimensions (a matrix) and can hold much more information - URLs, contact details, WiFi credentials, and more. If the destination may change after printing, use a <a href="/dynamic-qr-code-generator">dynamic QR code</a> instead, and see <a href="/qr-code-tracking">QR code tracking</a> if you need scan analytics.',
|
||||
},
|
||||
];
|
||||
@@ -15,10 +15,8 @@ import {
|
||||
} from 'lucide-react';
|
||||
import { ToolBreadcrumb } from '@/components/seo/BreadcrumbSchema';
|
||||
import { RelatedTools } from '@/components/marketing/RelatedTools';
|
||||
import {
|
||||
generateSoftwareAppSchema,
|
||||
generateFaqSchema,
|
||||
} from '@/lib/schema-utils';
|
||||
import { generateSoftwareAppSchema } from '@/lib/schema-utils';
|
||||
import { barcodeFaqs } from './faqs';
|
||||
|
||||
// SEO Optimized Metadata
|
||||
export const metadata: Metadata = {
|
||||
@@ -142,68 +140,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT20S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'What is a Barcode Generator?': {
|
||||
question: 'What is a Barcode Generator?',
|
||||
answer:
|
||||
'A Barcode Generator is an online tool that converts numbers or text into scannable barcode images that can be used for products, labels, and inventory systems.',
|
||||
},
|
||||
'Is this barcode generator free to use?': {
|
||||
question: 'Is this barcode generator free to use?',
|
||||
answer:
|
||||
'Yes, our online barcode generator is completely free to use with no hidden costs or sign-ups required. You can generate, download, and print barcodes instantly.',
|
||||
},
|
||||
'Which barcode format should I use?': {
|
||||
question: 'Which barcode format should I use?',
|
||||
answer:
|
||||
'EAN-13 is standard for retail in Europe/Global. UPC-A is standard for retail in USA/Canada. Code 128 is best for logistics and internal tracking as it supports letters and numbers.',
|
||||
},
|
||||
'Can I download barcodes in vector format (SVG)?': {
|
||||
question: 'Can I download barcodes in vector format (SVG)?',
|
||||
answer:
|
||||
'Yes! We offer SVG downloads. SVG files are vector-based, meaning they can be scaled to any size without losing quality-perfect for professional product packaging.',
|
||||
},
|
||||
'How do I generate a barcode online?': {
|
||||
question: 'How do I generate a barcode online?',
|
||||
answer:
|
||||
'To generate a barcode online, enter your product number or text, select the desired barcode format (such as EAN-13 or Code 128), and click the generate button. The barcode will be created instantly.',
|
||||
},
|
||||
'Are generated barcodes scannable?': {
|
||||
question: 'Are generated barcodes scannable?',
|
||||
answer:
|
||||
'Yes, barcodes generated with a proper barcode generator are fully scannable. We generate standard-compliant barcodes readable by any standard optical or laser barcode scanner.',
|
||||
},
|
||||
'Can I use these barcodes for Amazon (EAN/UPC)?': {
|
||||
question: 'Can I use these barcodes for Amazon (EAN/UPC)?',
|
||||
answer:
|
||||
'You can generate the image for Amazon here if you already have your EAN/UPC number. However, you cannot "create" a valid global EAN number here-you must purchase those official numbers from GS1 to sell on major platforms like Amazon.',
|
||||
},
|
||||
'What is the difference between a barcode and a QR code?': {
|
||||
question: 'What is the difference between a barcode and a QR code?',
|
||||
answer:
|
||||
'A barcode stores data horizontally (1D) and is mainly used for product IDs. A QR code stores data in 2D (matrix) and can hold much more information, such as URLs, vCards, or WiFi credentials.',
|
||||
},
|
||||
'What barcode format do Amazon and Walmart require?': {
|
||||
question: 'What barcode format do Amazon and Walmart require?',
|
||||
answer:
|
||||
'Amazon and Walmart require UPC-A (12 digits) for products sold in the United States and Canada, and EAN-13 (13 digits) for products sold internationally. You must purchase official GS1-registered numbers to sell on these platforms - you cannot self-generate valid retail UPC/EAN numbers.',
|
||||
},
|
||||
'What is the minimum print size for a scannable barcode?': {
|
||||
question: 'What is the minimum print size for a scannable barcode?',
|
||||
answer:
|
||||
'The GS1 standard recommends a minimum width of 25.9mm (1 inch) for EAN-13 barcodes on retail packaging. Smaller sizes increase scan failure rates. For internal inventory labels, Code 128 can be printed as narrow as 15mm wide while remaining reliably scannable with modern handheld scanners.',
|
||||
},
|
||||
'Can I use Code 128 for inventory management?': {
|
||||
question: 'Can I use Code 128 for inventory management?',
|
||||
answer:
|
||||
'Yes. Code 128 is the most widely used barcode format for inventory, logistics, and warehousing because it supports both letters and numbers, has high data density, and is readable by virtually all laser and 2D scanners. It is the recommended format for internal SKU systems, warehouse bin labels, and shipping labels.',
|
||||
},
|
||||
'What is the difference between EAN-13 and UPC-A?': {
|
||||
question: 'What is the difference between EAN-13 and UPC-A?',
|
||||
answer:
|
||||
'EAN-13 (13 digits) is the international retail standard used in Europe, Asia, and globally. UPC-A (12 digits) is the North American retail standard used in the US and Canada. An EAN-13 barcode starting with a 0 is actually a UPC-A code - all UPC-A codes are a subset of EAN-13. Most modern POS scanners read both formats.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/barcode-generator#faq',
|
||||
mainEntity: barcodeFaqs.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Phone, Shield, Zap, Smartphone, PhoneCall, Download } from 'lucide-reac
|
||||
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 for "Call QR Code"
|
||||
export const metadata: Metadata = {
|
||||
@@ -35,6 +36,48 @@ 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: 'Does it call automatically?',
|
||||
answer: 'Scanning the QR code opens the phone dialer with the number pre-filled. The user must tap the call button to initiate the call (security feature of phones).',
|
||||
},
|
||||
{
|
||||
question: 'Does it work internationally?',
|
||||
answer: 'Yes! We recommend entering your number in international format (starting with +) to ensure it works anywhere in the world.',
|
||||
},
|
||||
{
|
||||
question: 'Is my phone number private?',
|
||||
answer: 'Yes. We do not store your number. It is encoded directly into the QR code image.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track calls?',
|
||||
answer: 'This static Call QR Code cannot track calls. For tracking scans and analytics, consider using our VCard Plus solution.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, completely free. We do not charge for generating or scanning the code.',
|
||||
},
|
||||
{
|
||||
question: 'Do I need to include the country code?',
|
||||
answer: 'We highly recommend it. Adding the country code (e.g., +1 for USA/Canada, +44 for UK) ensures any phone from any region can dial your number correctly.',
|
||||
},
|
||||
{
|
||||
question: 'Does this work on iPhone and Android?',
|
||||
answer: 'Yes, Call QR codes are a standard format supported natively by iOS and Android camera apps.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the number later?',
|
||||
answer: 'No. Static Call QR codes can\'t be edited. If your phone number changes, you\'ll need a new QR code. Use a Dynamic QR Code if you anticipate changes.',
|
||||
},
|
||||
{
|
||||
question: 'Is there a cost per scan?',
|
||||
answer: 'No. There are no fees or limits on scanning. It works just like sharing your phone number.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +125,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Does it call automatically?': {
|
||||
question: 'Does it call automatically?',
|
||||
answer: 'Scanning the QR code opens the phone dialer with the number pre-filled. The user must tap the call button to initiate the call (security feature of phones).',
|
||||
},
|
||||
'Does it work internationally?': {
|
||||
question: 'Does it work internationally?',
|
||||
answer: 'Yes! We recommend entering your number in international format (starting with +) to ensure it works anywhere in the world.',
|
||||
},
|
||||
'Is my phone number private?': {
|
||||
question: 'Is my phone number private?',
|
||||
answer: 'Yes. We do not store your number. It is encoded directly into the QR code image.',
|
||||
},
|
||||
'Can I track calls?': {
|
||||
question: 'Can I track calls?',
|
||||
answer: 'This static Call QR Code cannot track calls. For tracking scans and analytics, consider using our VCard Plus solution.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, completely free. We do not charge for generating or scanning the code.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/call-qr-code-generator#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -286,26 +319,13 @@ export default function CallQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Do I need to include the country code?"
|
||||
answer="We highly recommend it. Adding the country code (e.g., +1 for USA/Canada, +44 for UK) ensures any phone from any region can dial your number correctly."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does this work on iPhone and Android?"
|
||||
answer="Yes, Call QR codes are a standard format supported natively by iOS and Android camera apps."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I change the number later?"
|
||||
answer="No. Static Call QR codes can't be edited. If your phone number changes, you'll need a new QR code. Use a Dynamic QR Code if you anticipate changes."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is there a cost per scan?"
|
||||
answer="No. There are no fees or limits on scanning. It works just like sharing your phone number."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes, completely free. We do not charge for generating or scanning the code."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -326,9 +346,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Bitcoin, Shield, Zap, Smartphone, Wallet, Coins, Sparkles, Download, Sh
|
||||
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: 'Is it safe to share my wallet address?',
|
||||
answer: 'Yes. Your public wallet address is designed to be shared so you can receive funds. Never share your private key.',
|
||||
},
|
||||
{
|
||||
question: 'Which currencies are supported?',
|
||||
answer: 'Our generator supports standard URI schemes for Bitcoin, Ethereum, Solana, and can generally store any wallet string for other coins.',
|
||||
},
|
||||
{
|
||||
question: 'Can I add a specific amount?',
|
||||
answer: 'Yes, you can pre-fill an amount so when the user scans, their wallet app automatically suggests the correct payment value.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work with all wallets?',
|
||||
answer: 'Yes, standard crypto QR codes are universally readable by almost all modern wallet apps (Coinbase, MetaMask, Trust Wallet, etc.).',
|
||||
},
|
||||
{
|
||||
question: 'Are there any fees?',
|
||||
answer: 'No. This generator is completely free. We do not charge any fees for generating codes or for the transactions made using them.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -83,28 +110,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Is it safe to share my wallet address?': {
|
||||
question: 'Is it safe to share my wallet address?',
|
||||
answer: 'Yes. Your public wallet address is designed to be shared so you can receive funds. Never share your private key.',
|
||||
},
|
||||
'Which currencies are supported?': {
|
||||
question: 'Which currencies are supported?',
|
||||
answer: 'Our generator supports standard URI schemes for Bitcoin, Ethereum, Solana, and can generally store any wallet string for other coins.',
|
||||
},
|
||||
'Can I add a specific amount?': {
|
||||
question: 'Can I add a specific amount?',
|
||||
answer: 'Yes, you can pre-fill an amount so when the user scans, their wallet app automatically suggests the correct payment value.',
|
||||
},
|
||||
'Does it work with all wallets?': {
|
||||
question: 'Does it work with all wallets?',
|
||||
answer: 'Yes, standard crypto QR codes are universally readable by almost all modern wallet apps (Coinbase, MetaMask, Trust Wallet, etc.).',
|
||||
},
|
||||
'Are there any fees?': {
|
||||
question: 'Are there any fees?',
|
||||
answer: 'No. This generator is completely free. We do not charge any fees for generating codes or for the transactions made using them.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/crypto-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -287,26 +304,13 @@ export default function CryptoQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Is it safe to share my wallet address?"
|
||||
answer="Yes. Your public wallet address is designed to be shared so you can receive funds. Never share your private key."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Which currencies are supported?"
|
||||
answer="Our generator supports standard URI schemes for Bitcoin, Ethereum, Solana, and can generally store any wallet string for other coins."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I add a specific amount?"
|
||||
answer="Yes, you can pre-fill an amount so when the user scans, their wallet app automatically suggests the correct payment value."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does it work with all wallets?"
|
||||
answer="Yes, standard crypto QR codes are universally readable by almost all modern wallet apps (Coinbase, MetaMask, Trust Wallet, etc.)."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Are there any fees?"
|
||||
answer="No. This generator is completely free. We do not charge any fees for generating codes or for the transactions made using them."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -327,9 +331,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Mail, Zap, Smartphone, Lock, Download, Sparkles } from 'lucide-react';
|
||||
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 = {
|
||||
@@ -26,6 +27,48 @@ 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: 'How does it work?',
|
||||
answer: 'When scanned, it opens the user\\\'s default email app (like Gmail or Outlook) with a new draft composed to your address.',
|
||||
},
|
||||
{
|
||||
question: 'Can I add a subject line?',
|
||||
answer: 'Yes! You can pre-fill the subject line and the body content so the sender just has to hit send.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, 100% free with unlimited scans.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work with attachments?',
|
||||
answer: 'No. The standard mailto format does not support attaching files automatically. Users will have to attach files manually.',
|
||||
},
|
||||
{
|
||||
question: 'Is it private?',
|
||||
answer: 'Yes. The data is encoded directly into the QR code. We do not store your email or message data.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work with Gmail?',
|
||||
answer: 'Yes, and Outlook, Apple Mail, Yahoo, etc. It opens the default mail app on the user\'s device.',
|
||||
},
|
||||
{
|
||||
question: 'Is it reversible?',
|
||||
answer: 'Yes, if you made a mistake you would need to generate a new code, as static QR codes cannot be edited after creation.',
|
||||
},
|
||||
{
|
||||
question: 'Is this tool free?',
|
||||
answer: 'Yes, completely free to use.',
|
||||
},
|
||||
{
|
||||
question: 'Can I attach files?',
|
||||
answer: 'No. The mailto standard does not support automatic attachment of files. Users must attach them manually.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -47,28 +90,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'How does it work?': {
|
||||
question: 'How does it work?',
|
||||
answer: 'When scanned, it opens the user\'s default email app (like Gmail or Outlook) with a new draft composed to your address.',
|
||||
},
|
||||
'Can I add a subject line?': {
|
||||
question: 'Can I add a subject line?',
|
||||
answer: 'Yes! You can pre-fill the subject line and the body content so the sender just has to hit send.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, 100% free with unlimited scans.',
|
||||
},
|
||||
'Does it work with attachments?': {
|
||||
question: 'Does it work with attachments?',
|
||||
answer: 'No. The standard mailto format does not support attaching files automatically. Users will have to attach files manually.',
|
||||
},
|
||||
'Is it private?': {
|
||||
question: 'Is it private?',
|
||||
answer: 'Yes. The data is encoded directly into the QR code. We do not store your email or message data.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/email-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
@@ -235,11 +268,13 @@ export default function EmailPage() {
|
||||
</h2>
|
||||
<p className="text-slate-600 text-center mb-10">Common questions about Email QR codes.</p>
|
||||
<div className="space-y-4">
|
||||
<FaqItem question="Does it work with Gmail?" answer="Yes, and Outlook, Apple Mail, Yahoo, etc. It opens the default mail app on the user's device." />
|
||||
<FaqItem question="Is it reversible?" answer="Yes, if you made a mistake you would need to generate a new code, as static QR codes cannot be edited after creation." />
|
||||
<FaqItem question="Is this tool free?" answer="Yes, completely free to use." />
|
||||
<FaqItem question="Can I attach files?" answer="No. The mailto standard does not support automatic attachment of files. Users must attach them manually." />
|
||||
<FaqItem question="Is it private?" answer="Yes. The data is encoded directly into the QR code. We do not store your email or message data." />
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -261,9 +296,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Calendar, Shield, Zap, Smartphone, Clock, UserCheck, Download, Share2,
|
||||
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,44 @@ 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: 'Which calendars does it support?',
|
||||
answer: 'The QR code uses the standard iCalendar (ICS) format. It works with Apple Calendar, Google Calendar, Outlook, and most other mobile calendar apps.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the date after printing?',
|
||||
answer: 'No. This is a static QR code, meaning the event details are permanently embedded in the image. If the date changes, you must create a new QR code. Use our Dynamic QR Code to edit events anytime.',
|
||||
},
|
||||
{
|
||||
question: 'Is there a limit to the description length?',
|
||||
answer: 'Yes, because the data is stored in the QR code pattern. We recommend keeping descriptions concise (under 300 characters) to ensure the code remains easy to scan.',
|
||||
},
|
||||
{
|
||||
question: 'Do users need an app?',
|
||||
answer: 'No special app is needed. Standard camera apps on iOS and Android can read the code and will prompt the user to "Add to Calendar".',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes. Creating and scanning the code is completely free and requires no signup.',
|
||||
},
|
||||
{
|
||||
question: 'Does this work with Google Calendar?',
|
||||
answer: 'Yes, the generated QR code creates a standard .ics file event, which is compatible with Google Calendar, Apple Calendar, Outlook, and most others.',
|
||||
},
|
||||
{
|
||||
question: 'Is the QR code reusable?',
|
||||
answer: 'No. Because the specific date and time are embedded in the code, you cannot change them later. If the event is rescheduled, you must generate a new QR code.',
|
||||
},
|
||||
{
|
||||
question: 'What happens if the event is in a different time zone?',
|
||||
answer: 'The user\'s calendar will usually convert the time to their local time zone automatically when they save it.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +121,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT45S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Which calendars does it support?': {
|
||||
question: 'Which calendars does it support?',
|
||||
answer: 'The QR code uses the standard iCalendar (ICS) format. It works with Apple Calendar, Google Calendar, Outlook, and most other mobile calendar apps.',
|
||||
},
|
||||
'Can I change the date after printing?': {
|
||||
question: 'Can I change the date after printing?',
|
||||
answer: 'No. This is a static QR code, meaning the event details are permanently embedded in the image. If the date changes, you must create a new QR code. Use our Dynamic QR Code to edit events anytime.',
|
||||
},
|
||||
'Is there a limit to the description length?': {
|
||||
question: 'Is there a limit to the description length?',
|
||||
answer: 'Yes, because the data is stored in the QR code pattern. We recommend keeping descriptions concise (under 300 characters) to ensure the code remains easy to scan.',
|
||||
},
|
||||
'Do users need an app?': {
|
||||
question: 'Do users need an app?',
|
||||
answer: 'No special app is needed. Standard camera apps on iOS and Android can read the code and will prompt the user to "Add to Calendar".',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes. Creating and scanning the code is completely free and requires no signup.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/event-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -281,22 +310,13 @@ export default function EventQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Does this work with Google Calendar?"
|
||||
answer="Yes, the generated QR code creates a standard .ics file event, which is compatible with Google Calendar, Apple Calendar, Outlook, and most others."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is the QR code reusable?"
|
||||
answer="No. Because the specific date and time are embedded in the code, you cannot change them later. If the event is rescheduled, you must generate a new QR code."
|
||||
/>
|
||||
<FaqItem
|
||||
question="What happens if the event is in a different time zone?"
|
||||
answer="The user's calendar will usually convert the time to their local time zone automatically when they save it."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes. Creating and scanning the code is completely free."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -317,9 +337,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { MapPin, Shield, Zap, Smartphone, Navigation, Map, Download, Share2 } fr
|
||||
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,44 @@ 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: 'Which map app does it open?',
|
||||
answer: 'Our generator creates a universal Google Maps link. On most devices, this will open the Google Maps app if installed, or the browser version if not. It is the most compatible method.',
|
||||
},
|
||||
{
|
||||
question: 'How do I find my Latitude and Longitude?',
|
||||
answer: 'On Google Maps desktop: Right-click any spot on the map. The first item in the menu is the coordinates. Click to copy them.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work offline?',
|
||||
answer: 'The QR code itself can be scanned offline, but the user will likely need an internet connection to load the map and get directions.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use an address instead?',
|
||||
answer: 'For precise results, we use coordinates. However, you can use our URL Generator and paste a link to your Google Maps address search result if you prefer.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, generating this location QR code is completely free and requires no signup.',
|
||||
},
|
||||
{
|
||||
question: 'Why not just use an address?',
|
||||
answer: 'Addresses can be ambiguous or cover large areas (like a park or stadium). Coordinates point to an exact geographic spot, ensuring visitors find the specific meeting point or parking entrance.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work on Apple Maps?',
|
||||
answer: 'Yes. While the underlying link is a Google Maps link, iOS devices usually handle these gracefully, either opening them in the Google Maps app (if installed) or the browser, where Apple Maps can often intercept directions.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track who scanned it?',
|
||||
answer: 'Not with this static tool. If you need scan analytics (e.g., how many people scanned your storefront QR), you should use our Dynamic QR Code service.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +121,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT45S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Which map app does it open?': {
|
||||
question: 'Which map app does it open?',
|
||||
answer: 'Our generator creates a universal Google Maps link. On most devices, this will open the Google Maps app if installed, or the browser version if not. It is the most compatible method.',
|
||||
},
|
||||
'How do I find my Latitude and Longitude?': {
|
||||
question: 'How do I find my Latitude and Longitude?',
|
||||
answer: 'On Google Maps desktop: Right-click any spot on the map. The first item in the menu is the coordinates. Click to copy them.',
|
||||
},
|
||||
'Does it work offline?': {
|
||||
question: 'Does it work offline?',
|
||||
answer: 'The QR code itself can be scanned offline, but the user will likely need an internet connection to load the map and get directions.',
|
||||
},
|
||||
'Can I use an address instead?': {
|
||||
question: 'Can I use an address instead?',
|
||||
answer: 'For precise results, we use coordinates. However, you can use our URL Generator and paste a link to your Google Maps address search result if you prefer.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, generating this location QR code is completely free and requires no signup.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/geolocation-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -284,26 +313,13 @@ export default function GeolocationQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Why not just use an address?"
|
||||
answer="Addresses can be ambiguous or cover large areas (like a park or stadium). Coordinates point to an exact geographic spot, ensuring visitors find the specific meeting point or parking entrance."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does it work on Apple Maps?"
|
||||
answer="Yes. While the underlying link is a Google Maps link, iOS devices usually handle these gracefully, either opening them in the Google Maps app (if installed) or the browser, where Apple Maps can often intercept directions."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes, generating this location QR code is completely free and requires no signup."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I track who scanned it?"
|
||||
answer="Not with this static tool. If you need scan analytics (e.g., how many people scanned your storefront QR), you should use our Dynamic QR Code service."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes, generating this location QR code is completely free and requires no signup."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -324,9 +340,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { CreditCard, Shield, Zap, Smartphone, DollarSign, Download, Share2, Bank
|
||||
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: 'How does the PayPal QR code work?',
|
||||
answer: 'When scanned, it opens the PayPal app or website with your PayPal.me link. If you set an amount, it will be pre-filled for the payer.',
|
||||
},
|
||||
{
|
||||
question: 'Do I need a PayPal Business account?',
|
||||
answer: 'No. Any PayPal account with a PayPal.me link can use this generator. Personal accounts work fine for tips and donations.',
|
||||
},
|
||||
{
|
||||
question: 'Is there a fee for using the QR code?',
|
||||
answer: 'This generator is 100% free. PayPal may charge their standard transaction fees when you receive payments.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the amount later?',
|
||||
answer: 'No, this is a static QR code. The amount is encoded permanently. For variable amounts, leave the amount field empty.',
|
||||
},
|
||||
{
|
||||
question: 'What currencies are supported?',
|
||||
answer: 'We support EUR, USD, GBP, and CHF. PayPal handles currency conversion automatically.',
|
||||
},
|
||||
{
|
||||
question: 'What if I don\'t have a PayPal.me link?',
|
||||
answer: 'You can create one for free in your PayPal account settings. Go to paypal.me to set up your personalized link.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -83,28 +114,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'How does the PayPal QR code work?': {
|
||||
question: 'How does the PayPal QR code work?',
|
||||
answer: 'When scanned, it opens the PayPal app or website with your PayPal.me link. If you set an amount, it will be pre-filled for the payer.',
|
||||
},
|
||||
'Do I need a PayPal Business account?': {
|
||||
question: 'Do I need a PayPal Business account?',
|
||||
answer: 'No. Any PayPal account with a PayPal.me link can use this generator. Personal accounts work fine for tips and donations.',
|
||||
},
|
||||
'Is there a fee for using the QR code?': {
|
||||
question: 'Is there a fee for using the QR code?',
|
||||
answer: 'This generator is 100% free. PayPal may charge their standard transaction fees when you receive payments.',
|
||||
},
|
||||
'Can I change the amount later?': {
|
||||
question: 'Can I change the amount later?',
|
||||
answer: 'No, this is a static QR code. The amount is encoded permanently. For variable amounts, leave the amount field empty.',
|
||||
},
|
||||
'What currencies are supported?': {
|
||||
question: 'What currencies are supported?',
|
||||
answer: 'We support EUR, USD, GBP, and CHF. PayPal handles currency conversion automatically.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/paypal-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -275,26 +296,13 @@ export default function PayPalQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="How does the PayPal QR code work?"
|
||||
answer="When scanned, it opens the PayPal app or website with your PayPal.me link. If you set an amount, it will be pre-filled for the payer."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Do I need a PayPal Business account?"
|
||||
answer="No. Any PayPal account with a PayPal.me link can use this generator. Personal accounts work fine for tips and donations."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is there a fee for using the QR code?"
|
||||
answer="This generator is 100% free. PayPal may charge their standard transaction fees when you receive payments."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I change the amount later?"
|
||||
answer="No, this is a static QR code. The amount is encoded permanently. For variable amounts, leave the amount field empty."
|
||||
/>
|
||||
<FaqItem
|
||||
question="What if I don't have a PayPal.me link?"
|
||||
answer="You can create one for free in your PayPal account settings. Go to paypal.me to set up your personalized link."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -315,9 +323,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { MessageSquare, Shield, Zap, Smartphone, Send } from 'lucide-react';
|
||||
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,44 @@ 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: 'Does the text send automatically?',
|
||||
answer: 'No. The QR code opens the messaging app with the text typed out. The user must simply tap "Send". This is a security feature of all smartphones.',
|
||||
},
|
||||
{
|
||||
question: 'Is there a cost?',
|
||||
answer: 'Generating the code is free. Standard SMS rates apply for the person sending the text message, depending on their carrier plan.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the message later?',
|
||||
answer: 'No. Static QR codes have the message embedded in them. To change the message, you need a new QR code.',
|
||||
},
|
||||
{
|
||||
question: 'What uses are there for SMS QR codes?',
|
||||
answer: 'They are great for SMS marketing opt-ins ("Text JOIN to 12345"), customer support requests, or voting via text.',
|
||||
},
|
||||
{
|
||||
question: 'Does the user need an internet connection?',
|
||||
answer: 'No. The QR code contains all the info offline. However, the user needs a cellular signal to actually send the SMS message.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free for the user to send?',
|
||||
answer: 'It depends on their mobile plan. Standard SMS rates apply, though most modern plans include unlimited texting.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use shortcodes?',
|
||||
answer: 'Yes. You can enter a shortcode (e.g. 55555) in the phone number field instead of a regular number.',
|
||||
},
|
||||
{
|
||||
question: 'Is my phone number visible?',
|
||||
answer: 'Yes. Since the user is sending a text to you, they will see your number (or shortcode) in their messaging app.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -70,24 +109,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Does the text send automatically?': {
|
||||
question: 'Does the text send automatically?',
|
||||
answer: 'No. The QR code opens the messaging app with the text typed out. The user must simply tap "Send". This is a security feature of all smartphones.',
|
||||
},
|
||||
'Is there a cost?': {
|
||||
question: 'Is there a cost?',
|
||||
answer: 'Generating the code is free. Standard SMS rates apply for the person sending the text message, depending on their carrier plan.',
|
||||
},
|
||||
'Can I change the message later?': {
|
||||
question: 'Can I change the message later?',
|
||||
answer: 'No. Static QR codes have the message embedded in them. To change the message, you need a new QR code.',
|
||||
},
|
||||
'What uses are there for SMS QR codes?': {
|
||||
question: 'What uses are there for SMS QR codes?',
|
||||
answer: 'They are great for SMS marketing opt-ins ("Text JOIN to 12345"), customer support requests, or voting via text.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/sms-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -247,22 +280,13 @@ export default function SMSQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Does the user need an internet connection?"
|
||||
answer="No. The QR code contains all the info offline. However, the user needs a cellular signal to actually send the SMS message."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free for the user to send?"
|
||||
answer="It depends on their mobile plan. Standard SMS rates apply, though most modern plans include unlimited texting."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I use shortcodes?"
|
||||
answer="Yes. You can enter a shortcode (e.g. 55555) in the phone number field instead of a regular number."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is my phone number visible?"
|
||||
answer="Yes. Since the user is sending a text to you, they will see your number (or shortcode) in their messaging app."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -283,9 +307,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,8 @@ import { QRCodeSVG } from 'qrcode.react';
|
||||
import { ToolBreadcrumb } from '@/components/seo/BreadcrumbSchema';
|
||||
import { RelatedTools } from '@/components/marketing/RelatedTools';
|
||||
import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection';
|
||||
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 = {
|
||||
@@ -37,6 +38,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: 'Microsoft Teams opens and the user is prompted to join the meeting. Works on desktop, mobile, and web.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work for recurring meetings?',
|
||||
answer: 'Yes! If your recurring meeting uses the same meeting link, the QR code will work for all sessions.',
|
||||
},
|
||||
{
|
||||
question: 'Can guests without Teams accounts join?',
|
||||
answer: 'Yes. Guests can join Teams meetings via the web browser without needing a Microsoft account.',
|
||||
},
|
||||
{
|
||||
question: 'Is this for personal or business Teams?',
|
||||
answer: 'Both! Works with Microsoft Teams for work, school, and personal accounts.',
|
||||
},
|
||||
{
|
||||
question: 'What about meeting rooms with digital displays?',
|
||||
answer: 'Perfect for that! Display the QR code on your room\'s screen so attendees can scan to join from their devices.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -79,24 +106,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'What happens when someone scans the QR code?': {
|
||||
question: 'What happens when someone scans the QR code?',
|
||||
answer: 'Microsoft Teams opens and the user is prompted to join the meeting. Works on desktop, mobile, and web.',
|
||||
},
|
||||
'Does it work for recurring meetings?': {
|
||||
question: 'Does it work for recurring meetings?',
|
||||
answer: 'Yes! If your recurring meeting uses the same meeting link, the QR code will work for all sessions.',
|
||||
},
|
||||
'Can guests without Teams accounts join?': {
|
||||
question: 'Can guests without Teams accounts join?',
|
||||
answer: 'Yes. Guests can join Teams meetings via the web browser without needing a Microsoft account.',
|
||||
},
|
||||
'Is this for personal or business Teams?': {
|
||||
question: 'Is this for personal or business Teams?',
|
||||
answer: 'Both! Works with Microsoft Teams for work, school, and personal accounts.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/teams-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -309,22 +330,13 @@ export default function TeamsQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="What happens when someone scans the QR code?"
|
||||
answer="Microsoft Teams opens and the user is prompted to join the meeting. Works on desktop, mobile, and web browser."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does it work for recurring meetings?"
|
||||
answer="Yes! If your recurring meeting uses the same meeting link, the QR code will work for all sessions."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can guests without Teams accounts join?"
|
||||
answer="Yes. Guests can join Teams meetings via the web browser without needing a Microsoft account."
|
||||
/>
|
||||
<FaqItem
|
||||
question="What about meeting rooms with digital displays?"
|
||||
answer="Perfect for that! Display the QR code on your room's screen so attendees can scan to join from their devices."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -345,9 +357,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Music, Shield, Zap, Smartphone, Video, Heart, Download, Share2 } from '
|
||||
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: 'Does this replace the in-app QR code?',
|
||||
answer: 'You can use either! The advantage of our generator is that you can print high-resolution versions for large posters, customize the color/frame, and it works with any standard QR scanner.',
|
||||
},
|
||||
{
|
||||
question: 'Can I link to a specific video?',
|
||||
answer: 'Yes, just paste the full video URL (e.g. tiktok.com/@user/video/123...) instead of your username.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, completely free from start to finish.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track who scanned my code?',
|
||||
answer: 'No, this is a static QR code. For analytics, you need a Dynamic QR Code.',
|
||||
},
|
||||
{
|
||||
question: 'Is it safe?',
|
||||
answer: 'Yes. The QR code simply contains a link to your TikTok profile. No personal data is collected.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +109,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Does this replace the in-app QR code?': {
|
||||
question: 'Does this replace the in-app QR code?',
|
||||
answer: 'You can use either! The advantage of our generator is that you can print high-resolution versions for large posters, customize the color/frame, and it works with any standard QR scanner.',
|
||||
},
|
||||
'Can I link to a specific video?': {
|
||||
question: 'Can I link to a specific video?',
|
||||
answer: 'Yes, just paste the full video URL (e.g. tiktok.com/@user/video/123...) instead of your username.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, completely free from start to finish.',
|
||||
},
|
||||
'Can I track who scanned my code?': {
|
||||
question: 'Can I track who scanned my code?',
|
||||
answer: 'No, this is a static QR code. For analytics, you need a Dynamic QR Code.',
|
||||
},
|
||||
'Is it safe?': {
|
||||
question: 'Is it safe?',
|
||||
answer: 'Yes. The QR code simply contains a link to your TikTok profile. No personal data is collected.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/tiktok-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -285,26 +302,13 @@ export default function TiktokQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Does this replace the in-app QR code?"
|
||||
answer="You can use either! The advantage of our generator is that you can print high-resolution versions for large posters, customize the color/frame, and it works with any standard QR scanner."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I link to a specific video?"
|
||||
answer="Yes, just paste the full video URL (e.g. tiktok.com/@user/video/123...) instead of your username."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes, completely free from start to finish."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I track who scanned my code?"
|
||||
answer="No, this is a static QR code. For analytics, you need a Dynamic QR Code."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it safe?"
|
||||
answer="Yes. The QR code simply contains a link to your TikTok profile. No personal data is collected."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -325,9 +329,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Link as LinkIcon, Shield, Zap, Smartphone, Globe } from 'lucide-react';
|
||||
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,40 @@ 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: 'Do these QR codes expire?',
|
||||
answer: 'No. These are static QR codes. They directly encode your URL and will work forever as long as your website is online.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track how many people scan it?',
|
||||
answer: 'No, static QR codes cannot be tracked. If you need scan usage analytics (location, device, time), you should use our Dynamic QR Code generator.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the destination URL later?',
|
||||
answer: 'No. Once a static QR code is printed, it cannot be changed. If you change your website URL, you will need to print a new code. Use Dynamic QR Codes if you need flexibility.',
|
||||
},
|
||||
{
|
||||
question: 'Is there a scan limit?',
|
||||
answer: 'No. There are zero limits on how many times your QR code can be scanned.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track scans?',
|
||||
answer: 'No, static QR codes cannot be tracked. If you need analytics to see who is scanning your code and from where, you need a Dynamic QR Code.',
|
||||
},
|
||||
{
|
||||
question: 'What happens if I change my website URL?',
|
||||
answer: 'If you change your URL, this static QR code will no longer work (unless you set up a redirect on your own server). With a Dynamic QR Code, you can update the destination URL anytime without reprinting the code.',
|
||||
},
|
||||
{
|
||||
question: 'Are there ads on the QR code?',
|
||||
answer: 'No. We do not insert ads before redirecting users. The scan goes directly to your URL.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -70,24 +105,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT20S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Do these QR codes expire?': {
|
||||
question: 'Do these QR codes expire?',
|
||||
answer: 'No. These are static QR codes. They directly encode your URL and will work forever as long as your website is online.',
|
||||
},
|
||||
'Can I track how many people scan it?': {
|
||||
question: 'Can I track how many people scan it?',
|
||||
answer: 'No, static QR codes cannot be tracked. If you need scan usage analytics (location, device, time), you should use our Dynamic QR Code generator.',
|
||||
},
|
||||
'Can I change the destination URL later?': {
|
||||
question: 'Can I change the destination URL later?',
|
||||
answer: 'No. Once a static QR code is printed, it cannot be changed. If you change your website URL, you will need to print a new code. Use Dynamic QR Codes if you need flexibility.',
|
||||
},
|
||||
'Is there a scan limit?': {
|
||||
question: 'Is there a scan limit?',
|
||||
answer: 'No. There are zero limits on how many times your QR code can be scanned.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/url-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -256,22 +285,13 @@ export default function URLQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Do these QR codes expire?"
|
||||
answer="No. Static URL QR codes do not expire. They contain the direct link to your website. As long as your website is active, the QR code will work."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I track scans?"
|
||||
answer="No, static QR codes cannot be tracked. If you need analytics to see who is scanning your code and from where, you need a Dynamic QR Code."
|
||||
/>
|
||||
<FaqItem
|
||||
question="What happens if I change my website URL?"
|
||||
answer="If you change your URL, this static QR code will no longer work (unless you set up a redirect on your own server). With a Dynamic QR Code, you can update the destination URL anytime without reprinting the code."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Are there ads on the QR code?"
|
||||
answer="No. We do not insert ads before redirecting users. The scan goes directly to your URL."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -292,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { MessageCircle, Shield, Zap, Smartphone, Send, Phone, Download, Check }
|
||||
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,44 @@ 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: 'Do users need to save my number first?',
|
||||
answer: 'No! That is the best part. Scanning the code opens the chat immediately without them needing to save you as a contact first.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use this for WhatsApp Business?',
|
||||
answer: 'Yes, it works perfectly for both personal and business accounts.',
|
||||
},
|
||||
{
|
||||
question: 'What is the Pre-filled Message?',
|
||||
answer: 'It is text that automatically appears in the user\\\'s typing field when they scan the code (e.g., "Hello, I want to order pizza"). They just have to hit send.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, this generator is completely free.',
|
||||
},
|
||||
{
|
||||
question: 'Can I track scans?',
|
||||
answer: 'This is a static QR code, so tracking is not included. Use our Dynamic QR Code generator for analytics.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work internationally?',
|
||||
answer: 'Yes. Since you include the country code, it works for anyone, anywhere in the world.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use this on my website?',
|
||||
answer: 'Yes, you can display the QR code on your contact page so desktop users can easily scan it to chat on their phone.',
|
||||
},
|
||||
{
|
||||
question: 'Is my phone number visible?',
|
||||
answer: 'Yes, the phone number is embedded in the link. It is the same visibility as putting your phone number on a business card.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +121,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT45S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Do users need to save my number first?': {
|
||||
question: 'Do users need to save my number first?',
|
||||
answer: 'No! That is the best part. Scanning the code opens the chat immediately without them needing to save you as a contact first.',
|
||||
},
|
||||
'Can I use this for WhatsApp Business?': {
|
||||
question: 'Can I use this for WhatsApp Business?',
|
||||
answer: 'Yes, it works perfectly for both personal and business accounts.',
|
||||
},
|
||||
'What is the Pre-filled Message?': {
|
||||
question: 'What is the Pre-filled Message?',
|
||||
answer: 'It is text that automatically appears in the user\'s typing field when they scan the code (e.g., "Hello, I want to order pizza"). They just have to hit send.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, this generator is completely free.',
|
||||
},
|
||||
'Can I track scans?': {
|
||||
question: 'Can I track scans?',
|
||||
answer: 'This is a static QR code, so tracking is not included. Use our Dynamic QR Code generator for analytics.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/whatsapp-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -305,26 +334,13 @@ export default function WhatsappQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Does it work internationally?"
|
||||
answer="Yes. Since you include the country code, it works for anyone, anywhere in the world."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I use this on my website?"
|
||||
answer="Yes, you can display the QR code on your contact page so desktop users can easily scan it to chat on their phone."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is my phone number visible?"
|
||||
answer="Yes, the phone number is embedded in the link. It is the same visibility as putting your phone number on a business card."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it free?"
|
||||
answer="Yes, this generator is completely free."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I track scans?"
|
||||
answer="This is a static QR code, so tracking is not included. Use our Dynamic QR Code generator for analytics."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -345,9 +361,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Wifi, Shield, Zap, Smartphone, Lock, QrCode, Download, Share2, Trending
|
||||
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 = {
|
||||
@@ -39,6 +40,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 it safe to enter my WiFi password?',
|
||||
answer: 'Yes, completely safe. This tool processes everything in your browser (client-side). Your password never leaves your device and is not sent to any server.',
|
||||
},
|
||||
{
|
||||
question: 'Do WiFi QR codes work on iPhone and Android?',
|
||||
answer: 'Yes. Both iOS (11+) and Android devices can scan WiFi QR codes using their built-in camera app. No additional apps required.',
|
||||
},
|
||||
{
|
||||
question: 'What happens if I change my WiFi password?',
|
||||
answer: 'If you change your WiFi password, the old QR code will stop working. You\\\'ll need to generate a new QR code with the updated credentials.For frequently changing passwords, consider using dynamic QR codes.',
|
||||
},
|
||||
{
|
||||
question: 'Can I customize the QR code design?',
|
||||
answer: 'Yes. You can change the QR code color and add frame labels like "Scan Me" or "WiFi" to make it more recognizable and user-friendly.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work for hidden networks?',
|
||||
answer: 'Yes, just check the "Hidden Network" box if your SSID is hidden. The QR code contains the standard WiFi string configuration.',
|
||||
},
|
||||
{
|
||||
question: 'Is it safe to enter my WiFi password here?',
|
||||
answer: 'Yes, completely safe. This tool uses client-side processing, meaning your WiFi password never leaves your device. It\'s processed locally in your browser to generate the QR code-no data is sent to any server.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -96,28 +127,18 @@ const jsonLd = {
|
||||
totalTime: 'PT1M',
|
||||
},
|
||||
// FAQPage Schema
|
||||
generateFaqSchema({
|
||||
'Is it safe to enter my WiFi password?': {
|
||||
question: 'Is it safe to enter my WiFi password?',
|
||||
answer: 'Yes, completely safe. This tool processes everything in your browser (client-side). Your password never leaves your device and is not sent to any server.',
|
||||
},
|
||||
'Do WiFi QR codes work on iPhone and Android?': {
|
||||
question: 'Do WiFi QR codes work on iPhone and Android?',
|
||||
answer: 'Yes. Both iOS (11+) and Android devices can scan WiFi QR codes using their built-in camera app. No additional apps required.',
|
||||
},
|
||||
'What happens if I change my WiFi password?': {
|
||||
question: 'What happens if I change my WiFi password?',
|
||||
answer: 'If you change your WiFi password, the old QR code will stop working. You\'ll need to generate a new QR code with the updated credentials.For frequently changing passwords, consider using dynamic QR codes.',
|
||||
},
|
||||
'Can I customize the QR code design?': {
|
||||
question: 'Can I customize the QR code design?',
|
||||
answer: 'Yes. You can change the QR code color and add frame labels like "Scan Me" or "WiFi" to make it more recognizable and user-friendly.',
|
||||
},
|
||||
'Does it work for hidden networks?': {
|
||||
question: 'Does it work for hidden networks?',
|
||||
answer: 'Yes, just check the "Hidden Network" box if your SSID is hidden. The QR code contains the standard WiFi string configuration.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/wifi-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -345,26 +366,13 @@ export default function WiFiQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Is it safe to enter my WiFi password here?"
|
||||
answer="Yes, completely safe. This tool uses client-side processing, meaning your WiFi password never leaves your device. It's processed locally in your browser to generate the QR code-no data is sent to any server."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Do WiFi QR codes work on iPhone and Android?"
|
||||
answer="Yes. iOS 11 and later, as well as all modern Android devices, can scan WiFi QR codes using the built-in camera app. Simply point the camera at the QR code and tap the notification to connect."
|
||||
/>
|
||||
<FaqItem
|
||||
question="What happens if I change my WiFi password?"
|
||||
answer="If you change your WiFi password, the old QR code will stop working. You'll need to generate a new QR code with the updated credentials. For frequently changing passwords, consider using dynamic QR codes."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I customize the QR code design?"
|
||||
answer="Yes. You can change the foreground color of the QR code and add frame labels such as 'Scan Me', 'WiFi', or 'Connect' to make your QR code more recognizable and user-friendly."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does it work for hidden networks?"
|
||||
answer="Yes, just check the 'Hidden Network' box if your SSID is hidden. The QR code contains the standard WiFi string configuration."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -386,9 +394,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import { Youtube, Shield, Zap, Smartphone, Play, Radio, Download, Share2 } from
|
||||
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,48 @@ 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: 'Does it open the YouTube app?',
|
||||
answer: 'Yes! If the user has the YouTube app installed, the QR code will automatically launch the app and play the video.',
|
||||
},
|
||||
{
|
||||
question: 'Can I link to a specific timestamp?',
|
||||
answer: 'Yes. If you include the timestamp in your YouTube link (e.g., ?t=60s), the video will start playing from that exact moment.',
|
||||
},
|
||||
{
|
||||
question: 'Can I use this for a playlist?',
|
||||
answer: 'Absolutely. Just paste the playlist URL, and users will be taken to the full list of videos.',
|
||||
},
|
||||
{
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, this tool is 100% free forever.',
|
||||
},
|
||||
{
|
||||
question: 'Does it work for YouTube Shorts?',
|
||||
answer: 'Yes, just paste the "Share" link from any YouTube Short.',
|
||||
},
|
||||
{
|
||||
question: 'Can I link to my Live Stream?',
|
||||
answer: 'Yes! Paste your channel\'s live link (e.g., youtube.com/c/YourChannel/live) and it will always go to your current live stream.',
|
||||
},
|
||||
{
|
||||
question: 'Does the video auto-play?',
|
||||
answer: 'Most smartphones will open the YouTube app and auto-play the video, but it depends on the user\'s specific settings.',
|
||||
},
|
||||
{
|
||||
question: 'Can I change the video later?',
|
||||
answer: 'Only if you use our Dynamic QR Code service. This static code will always point to the original link you entered.',
|
||||
},
|
||||
{
|
||||
question: 'Is it safe?',
|
||||
answer: 'Yes. The QR code simply contains your video link. No personal data is stored or tracked by this free tool.',
|
||||
},
|
||||
];
|
||||
|
||||
// JSON-LD Structured Data
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
@@ -82,28 +125,18 @@ const jsonLd = {
|
||||
],
|
||||
totalTime: 'PT30S',
|
||||
},
|
||||
generateFaqSchema({
|
||||
'Does it open the YouTube app?': {
|
||||
question: 'Does it open the YouTube app?',
|
||||
answer: 'Yes! If the user has the YouTube app installed, the QR code will automatically launch the app and play the video.',
|
||||
},
|
||||
'Can I link to a specific timestamp?': {
|
||||
question: 'Can I link to a specific timestamp?',
|
||||
answer: 'Yes. If you include the timestamp in your YouTube link (e.g., ?t=60s), the video will start playing from that exact moment.',
|
||||
},
|
||||
'Can I use this for a playlist?': {
|
||||
question: 'Can I use this for a playlist?',
|
||||
answer: 'Absolutely. Just paste the playlist URL, and users will be taken to the full list of videos.',
|
||||
},
|
||||
'Is it free?': {
|
||||
question: 'Is it free?',
|
||||
answer: 'Yes, this tool is 100% free forever.',
|
||||
},
|
||||
'Does it work for YouTube Shorts?': {
|
||||
question: 'Does it work for YouTube Shorts?',
|
||||
answer: 'Yes, just paste the "Share" link from any YouTube Short.',
|
||||
},
|
||||
}),
|
||||
{
|
||||
'@type': 'FAQPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/youtube-qr-code#faq',
|
||||
mainEntity: faqItems.map((item) => ({
|
||||
'@type': 'Question',
|
||||
name: item.question,
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: item.answer.replace(/<[^>]+>/g, ''),
|
||||
},
|
||||
})),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -282,26 +315,13 @@ export default function YoutubeQRCodePage() {
|
||||
</p>
|
||||
|
||||
<div className="space-y-4">
|
||||
<FaqItem
|
||||
question="Can I link to my Live Stream?"
|
||||
answer="Yes! Paste your channel's live link (e.g., youtube.com/c/YourChannel/live) and it will always go to your current live stream."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does the video auto-play?"
|
||||
answer="Most smartphones will open the YouTube app and auto-play the video, but it depends on the user's specific settings."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Can I change the video later?"
|
||||
answer="Only if you use our Dynamic QR Code service. This static code will always point to the original link you entered."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Is it safe?"
|
||||
answer="Yes. The QR code simply contains your video link. No personal data is stored or tracked by this free tool."
|
||||
/>
|
||||
<FaqItem
|
||||
question="Does it work for YouTube Shorts?"
|
||||
answer="Yes, just paste the 'Share' link from any YouTube Short."
|
||||
/>
|
||||
{faqItems.map((item) => (
|
||||
<FaqItem
|
||||
key={item.question}
|
||||
question={item.question}
|
||||
answer={item.answer}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -322,9 +342,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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user