From cd0a517d4aeff4136a76c3020fc6ebc3b766b0b2 Mon Sep 17 00:00:00 2001 From: null Date: Thu, 10 Sep 2026 04:59:49 -0500 Subject: [PATCH] feat(seo): the industry and support pages now point at the two service pages Both approved sheets ask for it: Unified Communications section 15 and Contact Center section 18 each list the pages that should link back to them. Home, the services index, the header and the footer already did. Managed Support and the four industry pages did not, and the industry pages linked to no service at all. Each industry page's own description already tells the reader Queue North "delivers phone, contact center, network, and IT support" for that industry, so all four qualify. The anchors are descriptive rather than the page names: "Business phone and UCaaS solutions" and "Contact center and CCaaS solutions". Rendered through the shared RelatedLinks component, in the industry sidebar card and after "Ideal For" on a service page. It renders nothing without links, so the five service pages that have none are untouched: only 5 of the 18 pages gain a Related services block, and they are exactly the five the sheets name. Verified against the build: both hrefs are present on managed-support and on all four industry pages, the built-HTML audit passes with every link and fragment resolving, and no other page gained the block. Closes #221. Co-Authored-By: Claude Opus 5 (1M context) --- src/data/industries.js | 16 ++++++++++++++++ src/data/services.js | 7 +++++++ src/pages/IndustryDetail.jsx | 8 ++++++++ src/pages/ServiceDetail.jsx | 5 +++++ 4 files changed, 36 insertions(+) diff --git a/src/data/industries.js b/src/data/industries.js index 2ca3416..100c332 100644 --- a/src/data/industries.js +++ b/src/data/industries.js @@ -1,6 +1,10 @@ export const industries = [ { id: 'healthcare', + related: [ + { to: '/services/unified-communications', label: 'Business phone and UCaaS solutions' }, + { to: '/services/contact-center', label: 'Contact center and CCaaS solutions' }, + ], name: 'Healthcare', shortDesc: 'HIPAA-compliant communications and infrastructure for medical providers', fullDesc: 'Patient experience, scheduling, and staff coordination with a focus on compliance.', @@ -20,6 +24,10 @@ export const industries = [ }, { id: 'retail', + related: [ + { to: '/services/unified-communications', label: 'Business phone and UCaaS solutions' }, + { to: '/services/contact-center', label: 'Contact center and CCaaS solutions' }, + ], name: 'Retail', shortDesc: 'Connect stores, teams, and customers with scalable retail communications', fullDesc: 'Connect stores, back office, and support teams while improving customer interaction.', @@ -39,6 +47,10 @@ export const industries = [ }, { id: 'manufacturing', + related: [ + { to: '/services/unified-communications', label: 'Business phone and UCaaS solutions' }, + { to: '/services/contact-center', label: 'Contact center and CCaaS solutions' }, + ], name: 'Manufacturing', shortDesc: 'Industrial communications for production floors and distributed operations', fullDesc: 'Reliable office-to-plant communications including paging and alerting for production environments.', @@ -58,6 +70,10 @@ export const industries = [ }, { id: 'education-finance', + related: [ + { to: '/services/unified-communications', label: 'Business phone and UCaaS solutions' }, + { to: '/services/contact-center', label: 'Contact center and CCaaS solutions' }, + ], name: 'Education & Finance', shortDesc: 'Secure, reliable communications for schools and financial institutions', fullDesc: 'Campus communications and customer-facing communications in tightly regulated environments.', diff --git a/src/data/services.js b/src/data/services.js index 57dc080..3aaed66 100644 --- a/src/data/services.js +++ b/src/data/services.js @@ -55,6 +55,13 @@ We support Cisco Webex Contact Center, 8x8 Contact Center, and other leading pla { id: 'managed-support', name: 'Managed Support', + // Asked for by both approved copy sheets: Unified Communications section 15 + // and Contact Center section 18 both list this page as one that should link + // back to them. + related: [ + { to: '/services/unified-communications', label: 'Business phone and UCaaS solutions' }, + { to: '/services/contact-center', label: 'Contact center and CCaaS solutions' }, + ], shortDesc: 'Expert IT support with proactive monitoring and rapid response', homeDesc: 'Your IT runs itself. 24/7 monitoring catches problems before you even notice them.', fullDesc: 'Consistent support, clear accountability, and lifecycle management that keep your environment stable long after deployment.', diff --git a/src/pages/IndustryDetail.jsx b/src/pages/IndustryDetail.jsx index 9efc361..cc6c447 100644 --- a/src/pages/IndustryDetail.jsx +++ b/src/pages/IndustryDetail.jsx @@ -4,6 +4,7 @@ import { useParams } from 'react-router-dom' import { industries } from '@/data/industries' import { Link } from 'react-router-dom' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card' +import RelatedLinks from '@/components/content/RelatedLinks' import { AlertCircle, ArrowLeft, ArrowRight, Building2, CheckCircle2 } from 'lucide-react' const IndustryDetail = () => { @@ -133,6 +134,13 @@ const IndustryDetail = () => {

Industry

{industry.name}

+
Request Consultation diff --git a/src/pages/ServiceDetail.jsx b/src/pages/ServiceDetail.jsx index f42d641..3b1d2a8 100644 --- a/src/pages/ServiceDetail.jsx +++ b/src/pages/ServiceDetail.jsx @@ -4,6 +4,7 @@ import { useParams } from 'react-router-dom' import { services } from '@/data/services' import { Link } from 'react-router-dom' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card' +import RelatedLinks from '@/components/content/RelatedLinks' import { ArrowLeft, ArrowRight, CheckCircle2, Info, Zap } from 'lucide-react' const serviceImageAlt = { @@ -144,6 +145,10 @@ const ServiceDetail = () => { ))}
+ + {/* Renders nothing for a service with no related links, so the + pages that have none are unchanged. */} + {/* Right Column - Sidebar */}