#

#

SC Breadcrumb

SC Breadcrumb

SC Breadcrumb

Aug 28, 2025

0 views

SC Breadcrumb builds a clean, responsive breadcrumb trail from the current URL, with configurable separator, max items (auto-ellipsis), alignment, and typography. It can also output schema.org JSON-LD for SEO (BreadcrumbList + optional BlogPosting), with empty-field cleanup for tidy markup.

Lilac Flower
Lilac Flower
Lilac Flower
Lilac Flower
#
Built With
React, CSS, Framer Code Component API
#
Layout Support
Fully Responsive (any width/height)
#
Orientation
Inline nav trail
#
Ideal Use Case
Page trails, article nav, SEO-friendly navigation
#
Built With
React, CSS, Framer Code Component API
#
Layout Support
Fully Responsive (any width/height)
#
Orientation
Inline nav trail
#
Ideal Use Case
Page trails, article nav, SEO-friendly navigation
#
Built With
React, CSS, Framer Code Component API
#
Layout Support
Fully Responsive (any width/height)
#
Orientation
Inline nav trail
#
Ideal Use Case
Page trails, article nav, SEO-friendly navigation

//

Tags

breadcrumb
navigation
seo
schema.org
json-ld
accessibility
//
Technologies
None (pure React + DOM)
//
Notes
No runtime libraries required; works with Framer’s standard runtime.
//
Technologies
None (pure React + DOM)
//
Notes
No runtime libraries required; works with Framer’s standard runtime.
//
Technologies
None (pure React + DOM)
//
Notes
No runtime libraries required; works with Framer’s standard runtime.
#
Logic Level
Low–Medium (path parsing + schema build)
#
Runtime Cost
Very Low (simple text/links)
#
Component Size
~2–3 KB (raw TSX)
#
Notes
JSON-LD injection is static; no reflow cost after render.
#
Logic Level
Low–Medium (path parsing + schema build)
#
Runtime Cost
Very Low (simple text/links)
#
Component Size
~2–3 KB (raw TSX)
#
Notes
JSON-LD injection is static; no reflow cost after render.
#
Logic Level
Low–Medium (path parsing + schema build)
#
Runtime Cost
Very Low (simple text/links)
#
Component Size
~2–3 KB (raw TSX)
#
Notes
JSON-LD injection is static; no reflow cost after render.
  1. Drop SCBreadcrumb into your page header area.

  2. Set Separator (e.g., /, ›, →).

  3. Choose Max Items (older items collapse to …).

  4. Pick Alignment (Left/Center/Right).

  5. (Optional) Style with the Font, Color, Hover controls.

  6. (Optional) Enable SEO: fill Breadcrumb Name/Slug/Root and/or Blog fields to emit JSON-LD.

  • Classic: separator="/" · maxItems=3 · color=#555 · hover=#0A7

  • Chevrons: separator="›" · maxItems=4 · center

  • Minimal: separator="•" · maxItems=2 · right

  • Path parsing: window.location.pathname → /a/b/c → ['a','b','c'].

  • Formatting: formatTitle() decodes URI, swaps -/_ with spaces, Title-Cases words.

  • Overflow: If segments.length > maxItems, prepend … and keep the last maxItems segments.

  • Link building: Each non-last crumb links to its cumulative absolute URL (origin + /a/...).

  • Schema:

    • BreadcrumbList uses Root → Name/Slug → (optional) Headline.

    • BlogPosting uses blog fields (author/publisher/logo/image/dates).

    • cleanObject() removes empty strings/arrays/objects before JSON-LD injection.



  • Text-only render; virtually zero layout cost.

  • Avoid extremely long labels; rely on maxItems to keep trails short.

  • Hover color changes are GPU-friendly; transition is limited to color.

  • Requires window.location (client render). For SSR, outputs a safe fallback (/) until hydrated.

  • JSON-LD is appended via <script type="application/ld+json">; safe in all evergreen browsers.

  • Ellipsis crumb … is non-interactive by design.

  • Use inside a <nav aria-label="Breadcrumb"> region when possible.

  • Last item should not be a link; mark it as the current page (aria-current="page" if wrapped in an anchor).

  • Separators are decorative—render as text with aria-hidden="true" or CSS ::before.

  • No network calls or storage.

  • JSON-LD strings are serialized, not executed; still ensure values come from trusted sources (avoid piping untrusted user input directly).

  • Uses window.location only; no cookies or tracking.

  • Small surface area; no global listeners.

Name

Type

Default

Description

font

Font

{"Inter",400,"1rem"}

Typography for items

color

string

#555

Link/label color

hoverColor

string

#009658

Hover color

separator

string

/

Character between crumbs (e.g., / › →)

maxItems

number

3

Max visible segments (older collapse to …)

gap

number

8

Space between crumbs (px)

alignment

enum

flex-start

Flex alignment (flex-start|center|flex-end)

sectionId

string

breadcrumb-section

Wrapper id attribute

schemaName

string

""

Breadcrumb display name (e.g., “Blog”)

schemaSlug

string

""

Breadcrumb slug (e.g., "blog")

schemaRoot

string

Home

Root label for position 1

blogHeadline

string

""

Article headline

blogDescription

string

""

Short description

blogImage

image

""

Primary image URL

blogImageHeight

number

800

Image height (px)

blogImageWidth

number

1200

Image width (px)

blogAuthorName

string

""

Author full name

blogAuthorURL

string

""

Author profile/home URL

blogPublisherName

string

""

Publisher name

blogPublisherLogo

image

""

Publisher logo URL

blogPublisherLogoHeight

number

60

Logo height (px)

blogPublisherLogoWidth

number

600

Logo width (px)

blogPublishDate

string

""

ISO date published (YYYY-MM-DD)

blogModifiedDate

string

""

ISO date modified (YYYY-MM-DD)

name:font
type:Font
default:{"Inter",400,"1rem"}
desc:Typography for items
name:color
type:string
default:#555
desc:Link/label color
name:hoverColor
type:string
default:#009658
desc:Hover color
name:separator
type:string
default:/
desc:Character between crumbs (e.g., / › →)
name:maxItems
type:number
default:3
desc:Max visible segments (older collapse to …)
name:gap
type:number
default:8
desc:Space between crumbs (px)
name:alignment
type:enum
default:flex-start
desc:Flex alignment (flex-start|center|flex-end)
name:sectionId
type:string
default:breadcrumb-section
desc:Wrapper id attribute
name:schemaName
type:string
default:""
desc:Breadcrumb display name (e.g., “Blog”)
name:schemaSlug
type:string
default:""
desc:Breadcrumb slug (e.g., "blog")
name:schemaRoot
type:string
default:Home
desc:Root label for position 1
name:blogHeadline
type:string
default:""
desc:Article headline
name:blogDescription
type:string
default:""
desc:Short description
name:blogImage
type:image
default:""
desc:Primary image URL
name:blogImageHeight
type:number
default:800
desc:Image height (px)
name:blogImageWidth
type:number
default:1200
desc:Image width (px)
name:blogAuthorName
type:string
default:""
desc:Author full name
name:blogAuthorURL
type:string
default:""
desc:Author profile/home URL
name:blogPublisherName
type:string
default:""
desc:Publisher name
name:blogPublisherLogo
type:image
default:""
desc:Publisher logo URL
name:blogPublisherLogoHeight
type:number
default:60
desc:Logo height (px)
name:blogPublisherLogoWidth
type:number
default:600
desc:Logo width (px)
name:blogPublishDate
type:string
default:""
desc:ISO date published (YYYY-MM-DD)
name:blogModifiedDate
type:string
default:""
desc:ISO date modified (YYYY-MM-DD)

Name

Type

Default

Description

name:font
type:Font
default:{"Inter",400,"1rem"}
desc:Typography for items
name:color
type:string
default:#555
desc:Link/label color
name:hoverColor
type:string
default:#009658
desc:Hover color
name:separator
type:string
default:/
desc:Character between crumbs (e.g., / › →)
name:maxItems
type:number
default:3
desc:Max visible segments (older collapse to …)
name:gap
type:number
default:8
desc:Space between crumbs (px)
name:alignment
type:enum
default:flex-start
desc:Flex alignment (flex-start|center|flex-end)
name:sectionId
type:string
default:breadcrumb-section
desc:Wrapper id attribute
name:schemaName
type:string
default:""
desc:Breadcrumb display name (e.g., “Blog”)
name:schemaSlug
type:string
default:""
desc:Breadcrumb slug (e.g., "blog")
name:schemaRoot
type:string
default:Home
desc:Root label for position 1
name:blogHeadline
type:string
default:""
desc:Article headline
name:blogDescription
type:string
default:""
desc:Short description
name:blogImage
type:image
default:""
desc:Primary image URL
name:blogImageHeight
type:number
default:800
desc:Image height (px)
name:blogImageWidth
type:number
default:1200
desc:Image width (px)
name:blogAuthorName
type:string
default:""
desc:Author full name
name:blogAuthorURL
type:string
default:""
desc:Author profile/home URL
name:blogPublisherName
type:string
default:""
desc:Publisher name
name:blogPublisherLogo
type:image
default:""
desc:Publisher logo URL
name:blogPublisherLogoHeight
type:number
default:60
desc:Logo height (px)
name:blogPublisherLogoWidth
type:number
default:600
desc:Logo width (px)
name:blogPublishDate
type:string
default:""
desc:ISO date published (YYYY-MM-DD)
name:blogModifiedDate
type:string
default:""
desc:ISO date modified (YYYY-MM-DD)
  • Use inside a <nav aria-label="Breadcrumb"> region when possible.

  • Last item should not be a link; mark it as the current page (aria-current="page" if wrapped in an anchor).

  • Separators are decorative—render as text with aria-hidden="true" or CSS ::before.

  • No network calls or storage.

  • JSON-LD strings are serialized, not executed; still ensure values come from trusted sources (avoid piping untrusted user input directly).

  • Uses window.location only; no cookies or tracking.

  • Small surface area; no global listeners.

Designed and implemented by SecretoCho Design. Pattern-safe URL formatting and schema cleanup helpers included.

SecretoCho Design 2025

Provided “as is” for navigation/SEO convenience. Validate structured data in your environment (Search Console/Rich Results Test) and ensure all values (images, author, publisher) are licensed and accurate.

Stay ahead of the curve with insights into emerging visualization trends and technologies.