From faaa7e0aa2330bd526c06251f4ca4ca130bd7d8f Mon Sep 17 00:00:00 2001 From: jaaaaavier Date: Tue, 10 Mar 2026 11:36:50 +0100 Subject: [PATCH 1/2] feat: breadcrumbs updates --- src/components/shared/Breadcrumb.tsx | 34 +++++++++++++ .../templates/comparisonPageTemplate.tsx | 29 ++++++++++- .../utils/schema-markup-generator.ts | 22 ++++++++- src/pages/ai-detector.tsx | 10 ++++ src/pages/alternative-to-chatGPT.tsx | 2 + src/pages/alternative-to-copilot.tsx | 2 + src/pages/alternative-to-deepseek.tsx | 2 + src/pages/alternative-to-gemini.tsx | 2 + src/pages/alternative-to-google-meet.tsx | 2 + src/pages/alternative-to-grok.tsx | 2 + src/pages/alternative-to-whereby.tsx | 2 + src/pages/alternative-to-wire.tsx | 2 + src/pages/alternative-to-zoom.tsx | 2 + src/pages/antivirus.tsx | 11 +++++ src/pages/business.tsx | 11 +++++ src/pages/byte-converter.tsx | 10 ++++ src/pages/cleaner.tsx | 11 +++++ .../free-cloud-object-storage.tsx | 11 +++++ src/pages/cloud-object-storage/index.tsx | 10 ++++ src/pages/cloud-storage-backup-solutions.tsx | 10 ++++ src/pages/cloud-storage-comparison.tsx | 9 ++++ src/pages/cloud-storage-for-photos.tsx | 10 ++++ src/pages/cloud-storage-for-videos.tsx | 11 +++++ src/pages/dark-web-monitor.tsx | 21 +++++++- src/pages/degoo-alternative.tsx | 21 +++++++- src/pages/drime-alternative.tsx | 21 +++++++- src/pages/drive/free-cloud-storage.tsx | 11 +++++ src/pages/drive/index.tsx | 10 ++++ src/pages/dropbox-alternative.tsx | 21 +++++++- src/pages/elephantdrive-alternative.tsx | 2 + src/pages/file-compressor/index.tsx | 21 +++++++- src/pages/file-converter/index.tsx | 21 +++++++- src/pages/filejump-alternative.tsx | 21 +++++++- src/pages/filen-alternative.tsx | 21 +++++++- src/pages/gdpr-cloud-storage.tsx | 10 ++++ src/pages/google-drive-alternative.tsx | 21 +++++++- src/pages/icedrive-alternative.tsx | 21 +++++++- src/pages/idrive-alternative.tsx | 21 +++++++- src/pages/koofr-alternative.tsx | 21 +++++++- src/pages/lifetime.tsx | 11 +++++ src/pages/meet.tsx | 11 +++++ src/pages/mega-alternative.tsx | 21 +++++++- src/pages/metadata-remover.tsx | 10 ++++ src/pages/nas.tsx | 11 +++++ src/pages/onedrive-alternative.tsx | 21 +++++++- src/pages/open-source.tsx | 11 +++++ src/pages/password-checker.tsx | 10 ++++ src/pages/password-generator.tsx | 10 ++++ src/pages/pcloud-alternative.tsx | 21 +++++++- src/pages/pricing/index.tsx | 11 ++++- src/pages/private-cloud-storage-solutions.tsx | 10 ++++ src/pages/proton-alternative.tsx | 21 +++++++- src/pages/sync-alternative.tsx | 21 +++++++- src/pages/teams-alternative.tsx | 21 +++++++- src/pages/temporary-email.tsx | 10 ++++ src/pages/terabox-alternative.tsx | 21 +++++++- src/pages/virus-scanner.tsx | 10 ++++ src/pages/vpn.tsx | 11 +++++ src/pages/webdav-rclone.tsx | 11 +++++ src/pages/what-does-google-know-about-me.tsx | 10 ++++ update_translations.py | 49 ------------------- 61 files changed, 753 insertions(+), 92 deletions(-) create mode 100644 src/components/shared/Breadcrumb.tsx delete mode 100644 update_translations.py diff --git a/src/components/shared/Breadcrumb.tsx b/src/components/shared/Breadcrumb.tsx new file mode 100644 index 000000000..d62ebbcc3 --- /dev/null +++ b/src/components/shared/Breadcrumb.tsx @@ -0,0 +1,34 @@ +import Link from 'next/link'; + +export interface BreadcrumbItem { + name: string; + url: string; +} + +interface BreadcrumbProps { + items: BreadcrumbItem[]; + className?: string; +} + +export const Breadcrumb = ({ items, className = '' }: BreadcrumbProps) => { + return ( + + ); +}; diff --git a/src/components/templates/comparisonPageTemplate.tsx b/src/components/templates/comparisonPageTemplate.tsx index 2057d33f1..803cea193 100644 --- a/src/components/templates/comparisonPageTemplate.tsx +++ b/src/components/templates/comparisonPageTemplate.tsx @@ -1,5 +1,8 @@ import Layout from '@/components/layout/Layout'; import Navbar from '@/components/layout/navbars/Navbar'; +import { Breadcrumb } from '@/components/shared/Breadcrumb'; +import { sm_breadcrumb } from '@/components/utils/schema-markup-generator'; +import Script from 'next/script'; import { PricingSectionWrapper } from '@/components/shared/pricing/PricingSectionWrapper'; import { CloudObjectStoragePriceCardSection } from '@/components/cloud-object-storage/PriceCardSection'; import { PromoCodeName } from '@/lib/types'; @@ -70,6 +73,8 @@ interface ComparisonPageProps { }; couponCodeName?: PromoCodeName; isS3Alternative?: boolean; + breadcrumbName?: string; + urlSlug?: string; } export const ComparisonPage = ({ @@ -85,6 +90,8 @@ export const ComparisonPage = ({ customSections = {}, couponCodeName, isS3Alternative = false, + breadcrumbName, + urlSlug, }: ComparisonPageProps): JSX.Element => { const metatags = metatagsDescriptions.filter((desc) => desc.id === metaTagId); const { @@ -138,8 +145,25 @@ export const ComparisonPage = ({ } = customSections; return ( - - + <> + {breadcrumbName && urlSlug && ( + + )} + + + + {breadcrumbName && urlSlug && ( +
+ +
+ )} @@ -205,5 +229,6 @@ export const ComparisonPage = ({