Dynamic SEO, Schema JSON-LD & 301 Redirects
The HiTech SEO & Canonicalization Infrastructure safeguards domain authority, guarantees search engine crawlability, and eliminates duplicate content penalties across bilingual index pages. It combines strict apex domain canonicalization, a comprehensive table of permanent 301 redirects, automated multilingual hreflang alternate links, and rich JSON-LD structured data generators.
1. Apex Domain Canonicalization (HTTP 301)
To consolidate backlink equity and prevent Google search split-indexing, next.config.ts enforces a strict 301 redirect for all www requests:
// next.config.ts
async redirects() {
return [
{
source: "/:path*",
has: [
{
type: "host",
value: "www.hitechinsurance.ai",
},
],
destination: "https://hitechinsurance.ai/:path*",
permanent: true,
},
// ...
];
}
2. Comprehensive Legacy & Alias Redirections Table
During platform modernization, several URL paths and short insurance aliases were upgraded to descriptive, SEO-optimized endpoints. All legacy routes return an HTTP 301 permanent redirect:
| Legacy Source URL | Canonical Destination URL | Permanent? | Purpose / Business Rationale |
|---|---|---|---|
/e/:slug | /en/e/:slug | false (307) | Short URL resolver for physical QR campaign flyers. |
/location | /locations | true (301) | Pluralization alignment for agency physical locations. |
/career | /careers | true (301) | Pluralization alignment for agency recruitment. |
/refer | /refer-and-earn | true (301) | High-intent CTA slug alignment for customer referrals. |
/login | /sign-in | true (301) | Canonical auth route matching Auth.js standard. |
/claims | /file-a-claim | true (301) | Action-oriented slug for policyholders filing claims. |
/about/insurance | /personal-information | true (301) | Legal compliance with CCPA personal info intake. |
/about/privacy-policy | /privacy-notice | true (301) | Statutory privacy notice consolidation. |
/privacy-policy | /privacy-notice | true (301) | Apex privacy alias consolidation. |
/smsPolicy | /sms-policy | true (301) | Kebab-case normalization. |
/about/privacy-appeal | /privacy-appeal | true (301) | Statutory consumer appeal pathway. |
/insurance/auto | /insurance/auto-insurance | true (301) | Keyword enrichment for auto insurance queries. |
/insurance/truck | /insurance/truck-insurance | true (301) | High-intent commercial trucking SEO slug. |
/insurance/homeowners | /insurance/homeowners-insurance | true (301) | Keyword enrichment for property coverage. |
/insurance/business | /insurance/business-insurance | true (301) | Keyword enrichment for commercial BOP. |
/insurance/general-liability | /insurance/general-liability-insurance | true (301) | Keyword enrichment for GL policies. |
/insurance/workers-compensation | /insurance/workers-compensation-insurance | true (301) | Keyword enrichment for WC coverage. |
/insurance/sr-22 | /insurance/sr22-insurance | true (301) | Normalized alphanumeric slug for SR-22 certificates. |
/insurance/mexico | /insurance/mexico-insurance | true (301) | Cross-border auto tourist policy alias. |
/insurance/construction | /insurance/construction-insurance | true (301) | Contractor and artisan liability alias. |
/insurance/retail-wholesale | /insurance/retail-and-wholesale-insurance | true (301) | Retail & wholesale merchandise coverage. |
/insurance/professional-service | /insurance/professional-services-insurance | true (301) | Errors & Omissions (E&O) alias. |
3. Metadata Service (MetaDataService.ts)
Metadata generation is centralized in src/services/meta-data-service.ts using React's cache() utility for per-request memoization:
export class MetaDataService {
static async generateMetadata(
path: string,
locale?: string,
replacements?: Record<string, string>
): Promise<Metadata> {
const currentLocale = locale || (await getLocale()) || "en";
const meta = this.getRouteMeta(path, currentLocale);
// Apply token replacements (e.g. {title}, {location})
let title = meta.title;
let description = meta.description;
if (replacements) {
for (const [key, value] of Object.entries(replacements)) {
title = title.replace(`{${key}}`, value);
description = description.replace(`{${key}}`, value);
}
}
const baseUrl = env.NEXT_PUBLIC_APP_URL.replace(/\/+$/, "");
const normalizedPath = path.replace(/^\/(en|es)(\/|$)/, "/");
const pathSuffix = normalizedPath === "/" ? "" : normalizedPath;
// Fully qualified canonical and hreflang definitions
const canonicalUrl = `${baseUrl}/${currentLocale}${pathSuffix}`;
const languages = {
en: `${baseUrl}/en${pathSuffix}`,
es: `${baseUrl}/es${pathSuffix}`,
"x-default": `${baseUrl}/en${pathSuffix}`,
};
return {
title,
description,
keywords: meta.keywords,
openGraph: {
title,
description,
url: canonicalUrl,
images: [{ url: DEFAULT_OG_IMAGE, width: 1200, height: 630 }],
type: (meta.ogType as "website" | "article") || "website",
siteName: "HiTech Insurance",
},
twitter: {
card: "summary_large_image",
title,
description,
images: [DEFAULT_OG_IMAGE],
},
alternates: {
canonical: canonicalUrl,
languages,
},
};
}
}
Self-Referential Canonical & Hreflang Alignment
By emitting en, es, and x-default (pointing to the English primary version), Google recognizes both language pages as mutual alternates rather than penalized duplicates:
<!-- Injected in HTML Head -->
<link rel="canonical" href="https://hitechinsurance.ai/en/insurance/auto-insurance" />
<link rel="alternate" hreflang="en" href="https://hitechinsurance.ai/en/insurance/auto-insurance" />
<link rel="alternate" hreflang="es" href="https://hitechinsurance.ai/es/insurance/auto-insurance" />
<link rel="alternate" hreflang="x-default" href="https://hitechinsurance.ai/en/insurance/auto-insurance" />
4. Structured JSON-LD Schemas (schema-generators.ts)
The application generates Google-compliant JSON-LD data graphs injected via <JsonLd /> components:
1. Organization Schema
Declares HiTech Insurance as an authorized brokerage entity, citing contact lines (1-800-XXX-XXXX), physical headquarters in Texas, and official logo graphics.
2. BreadcrumbList Schema
Enables breadcrumb trails in SERP listings:
Home > Insurance > Commercial Trucking Insurance
3. Article Schema
Injects author attribution, publisher information, datePublished, dateModified, and featured banner graphics for editorial blog guides.
4. FAQPage Schema
Formats question/answer lists for expandable rich accordion display within Google search results.
5. Security & Cloaking: Search Engine Bot Boundaries
To protect sensitive portals from being spidered:
/admin/*,/dashboard/*, and/embed/widgetexplicitly returnrobots: { index: false, follow: false }.- Unauthorized access attempts to
/admininvoke Next.jsnotFound(), returning an HTTP 404 to discourage credential stuffers and automated crawlers.