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) <noreply@anthropic.com>
This commit is contained in:
parent
2f1e24892a
commit
cd0a517d4a
|
|
@ -1,6 +1,10 @@
|
||||||
export const industries = [
|
export const industries = [
|
||||||
{
|
{
|
||||||
id: 'healthcare',
|
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',
|
name: 'Healthcare',
|
||||||
shortDesc: 'HIPAA-compliant communications and infrastructure for medical providers',
|
shortDesc: 'HIPAA-compliant communications and infrastructure for medical providers',
|
||||||
fullDesc: 'Patient experience, scheduling, and staff coordination with a focus on compliance.',
|
fullDesc: 'Patient experience, scheduling, and staff coordination with a focus on compliance.',
|
||||||
|
|
@ -20,6 +24,10 @@ export const industries = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'retail',
|
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',
|
name: 'Retail',
|
||||||
shortDesc: 'Connect stores, teams, and customers with scalable retail communications',
|
shortDesc: 'Connect stores, teams, and customers with scalable retail communications',
|
||||||
fullDesc: 'Connect stores, back office, and support teams while improving customer interaction.',
|
fullDesc: 'Connect stores, back office, and support teams while improving customer interaction.',
|
||||||
|
|
@ -39,6 +47,10 @@ export const industries = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'manufacturing',
|
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',
|
name: 'Manufacturing',
|
||||||
shortDesc: 'Industrial communications for production floors and distributed operations',
|
shortDesc: 'Industrial communications for production floors and distributed operations',
|
||||||
fullDesc: 'Reliable office-to-plant communications including paging and alerting for production environments.',
|
fullDesc: 'Reliable office-to-plant communications including paging and alerting for production environments.',
|
||||||
|
|
@ -58,6 +70,10 @@ export const industries = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'education-finance',
|
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',
|
name: 'Education & Finance',
|
||||||
shortDesc: 'Secure, reliable communications for schools and financial institutions',
|
shortDesc: 'Secure, reliable communications for schools and financial institutions',
|
||||||
fullDesc: 'Campus communications and customer-facing communications in tightly regulated environments.',
|
fullDesc: 'Campus communications and customer-facing communications in tightly regulated environments.',
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,13 @@ We support Cisco Webex Contact Center, 8x8 Contact Center, and other leading pla
|
||||||
{
|
{
|
||||||
id: 'managed-support',
|
id: 'managed-support',
|
||||||
name: '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',
|
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.',
|
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.',
|
fullDesc: 'Consistent support, clear accountability, and lifecycle management that keep your environment stable long after deployment.',
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import { useParams } from 'react-router-dom'
|
||||||
import { industries } from '@/data/industries'
|
import { industries } from '@/data/industries'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
|
||||||
|
import RelatedLinks from '@/components/content/RelatedLinks'
|
||||||
import { AlertCircle, ArrowLeft, ArrowRight, Building2, CheckCircle2 } from 'lucide-react'
|
import { AlertCircle, ArrowLeft, ArrowRight, Building2, CheckCircle2 } from 'lucide-react'
|
||||||
|
|
||||||
const IndustryDetail = () => {
|
const IndustryDetail = () => {
|
||||||
|
|
@ -133,6 +134,13 @@ const IndustryDetail = () => {
|
||||||
<h3 className="font-semibold text-text mb-2">Industry</h3>
|
<h3 className="font-semibold text-text mb-2">Industry</h3>
|
||||||
<p className="text-soft-text">{industry.name}</p>
|
<p className="text-soft-text">{industry.name}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<RelatedLinks
|
||||||
|
links={industry.related}
|
||||||
|
as="h3"
|
||||||
|
title="Related services"
|
||||||
|
className="pt-4 border-t border-border"
|
||||||
|
headingClassName="font-semibold text-text"
|
||||||
|
/>
|
||||||
<div className="pt-4 border-t border-border">
|
<div className="pt-4 border-t border-border">
|
||||||
<Link to="/contact#contact-form" className="flex w-full items-center justify-center gap-2 bg-primary-navy text-white px-4 py-3 rounded-md text-center font-medium hover:bg-primary-navy-dark transition-colors">
|
<Link to="/contact#contact-form" className="flex w-full items-center justify-center gap-2 bg-primary-navy text-white px-4 py-3 rounded-md text-center font-medium hover:bg-primary-navy-dark transition-colors">
|
||||||
Request Consultation
|
Request Consultation
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import { useParams } from 'react-router-dom'
|
||||||
import { services } from '@/data/services'
|
import { services } from '@/data/services'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
|
||||||
|
import RelatedLinks from '@/components/content/RelatedLinks'
|
||||||
import { ArrowLeft, ArrowRight, CheckCircle2, Info, Zap } from 'lucide-react'
|
import { ArrowLeft, ArrowRight, CheckCircle2, Info, Zap } from 'lucide-react'
|
||||||
|
|
||||||
const serviceImageAlt = {
|
const serviceImageAlt = {
|
||||||
|
|
@ -144,6 +145,10 @@ const ServiceDetail = () => {
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Renders nothing for a service with no related links, so the
|
||||||
|
pages that have none are unchanged. */}
|
||||||
|
<RelatedLinks links={service.related} className="mb-12" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Right Column - Sidebar */}
|
{/* Right Column - Sidebar */}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue