diff --git a/index.html b/index.html index 5ce9d9c..81b36dc 100644 --- a/index.html +++ b/index.html @@ -7,8 +7,27 @@ - Queue North Technologies | Modern Communications Infrastructure - + Queue North Technologies | Business Communications & IT Partner + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/SEO.jsx b/src/components/SEO.jsx new file mode 100644 index 0000000..bc537c1 --- /dev/null +++ b/src/components/SEO.jsx @@ -0,0 +1,43 @@ +import { Helmet } from 'react-helmet-async' + +const DEFAULT_IMAGE = 'https://queuenorth.com/assets/og-image.png' +const DEFAULT_IMAGE_ALT = 'Queue North Technologies — Business Communications & IT Partner' +const SITE_NAME = 'Queue North Technologies' + +const SEO = ({ title, description, url, type = 'website', image = DEFAULT_IMAGE, jsonLd }) => { + const schemas = jsonLd ? (Array.isArray(jsonLd) ? jsonLd : [jsonLd]) : [] + + return ( + + {title} + + + {/* Open Graph — Facebook, LinkedIn, iMessage, Google Messages, Slack */} + + + + + + + + + + + + + + {/* Twitter / X — also used by Apple Messages on iOS 13+ */} + + + + + + + {schemas.map((schema, i) => ( + + ))} + + ) +} + +export default SEO diff --git a/src/pages/About.jsx b/src/pages/About.jsx index 88a18fc..2f88cca 100644 --- a/src/pages/About.jsx +++ b/src/pages/About.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { Link } from 'react-router-dom' import { ArrowRight, Award, BadgeCheck, CheckCircle2, Compass, Cpu, Handshake, Headphones, Route, ShieldCheck, Users, Wrench } from 'lucide-react' @@ -46,16 +46,11 @@ const capabilities = [ const About = () => { return ( <> - - About Queue North | Veteran-Owned 8x8 Partner - 25+ Years of Service - - - - - - - - + {/* Page Hero */}
diff --git a/src/pages/Contact.jsx b/src/pages/Contact.jsx index 9fb9353..74263a2 100644 --- a/src/pages/Contact.jsx +++ b/src/pages/Contact.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { useState } from 'react' import { toast } from 'sonner' import { Button } from '@/components/ui/Button' @@ -133,16 +133,11 @@ const Contact = () => { return ( <> - - Contact Queue North | Schedule a Consultation - - - - - - - - + {/* Hero */}
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index 49b93e7..ce7dbcb 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card' import { services } from '@/data/services' import { industries } from '@/data/industries' @@ -57,18 +57,12 @@ const Home = () => { return ( <> - - Queue North Technologies | Business Communications & IT Partner - - - - - - - - - - + {/* Hero Section */}
diff --git a/src/pages/Industries.jsx b/src/pages/Industries.jsx index f987a48..9cb818c 100644 --- a/src/pages/Industries.jsx +++ b/src/pages/Industries.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { industries } from '@/data/industries' import { Link } from 'react-router-dom' import { HeartPulse, ShoppingCart, Factory, Landmark, Building2 } from 'lucide-react' @@ -14,16 +14,11 @@ const industryIcons = { const Industries = () => { return ( <> - - Industries We Serve | Queue North Technologies - - - - - - - - + {/* Page Hero */}
diff --git a/src/pages/IndustryDetail.jsx b/src/pages/IndustryDetail.jsx index 5ebcc1b..8bd5726 100644 --- a/src/pages/IndustryDetail.jsx +++ b/src/pages/IndustryDetail.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { useParams } from 'react-router-dom' import { industries } from '@/data/industries' import { Link } from 'react-router-dom' @@ -11,10 +11,11 @@ const IndustryDetail = () => { if (!industry) { return (
- - Industry Not Found | Queue North Technologies - - +

Industry Not Found

@@ -34,16 +35,11 @@ const IndustryDetail = () => { return ( <> - - {industryTitle} - - - - - - - - + {/* Page Hero */}
diff --git a/src/pages/ServiceDetail.jsx b/src/pages/ServiceDetail.jsx index d3fc6d3..5398596 100644 --- a/src/pages/ServiceDetail.jsx +++ b/src/pages/ServiceDetail.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { useParams } from 'react-router-dom' import { services } from '@/data/services' import { Link } from 'react-router-dom' @@ -18,10 +18,11 @@ const ServiceDetail = () => { if (!service) { return (
- - Service Not Found | Queue North Technologies - - +

Service Not Found

@@ -58,17 +59,12 @@ const ServiceDetail = () => { return ( <> - - {serviceTitle} - - - - - - - - - + {/* Page Hero */}
diff --git a/src/pages/Services.jsx b/src/pages/Services.jsx index 3ab19fa..eff788e 100644 --- a/src/pages/Services.jsx +++ b/src/pages/Services.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { services } from '@/data/services' import { MessageCircle, Users, LifeBuoy, GraduationCap, Link as LinkIcon, Wifi, Network } from 'lucide-react' import { Link } from 'react-router-dom' @@ -21,17 +21,12 @@ const serviceLd = { const Services = () => { return ( <> - - Business Phone, UCaaS & IT Services | Queue North Technologies - - - - - - - - - + {/* Page Hero */}
diff --git a/src/pages/Support.jsx b/src/pages/Support.jsx index 93de4f8..2b52f0a 100644 --- a/src/pages/Support.jsx +++ b/src/pages/Support.jsx @@ -1,4 +1,4 @@ -import { Helmet } from 'react-helmet-async' +import SEO from '@/components/SEO' import { useState } from 'react' import { toast } from 'sonner' import { Button } from '@/components/ui/Button' @@ -135,16 +135,11 @@ const Support = () => { return ( <> - - IT Support & Help Desk | Queue North Technologies - - - - - - - - + {/* Page Hero */}