seo + press V2
This commit is contained in:
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user