-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add SEO microdata for doc breadcrumbs #6697
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,38 +22,49 @@ function BreadcrumbsItemLink({ | |
}): JSX.Element { | ||
const className = clsx('breadcrumbs__link', styles.breadcrumbsItemLink); | ||
return href ? ( | ||
<Link className={className} href={href}> | ||
{children} | ||
<Link className={className} href={href} itemProp="item"> | ||
<span itemProp="name">{children}</span> | ||
</Link> | ||
) : ( | ||
<span className={className}>{children}</span> | ||
<span className={className} itemProp="item name"> | ||
{children} | ||
</span> | ||
); | ||
} | ||
|
||
// TODO move to design system folder | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not even sure what "design system folder" is, and my intuition tells me I don't like this direction😅 Is that like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Josh-Cena it's a good practice to have a design system for the consistency of any React app We already have one design system anyway: Infima, but it's a CSS one As we are in React land, we should create a well-encapsulated abstraction on top (think "infima-react") instead of using infima class names and low-level dom elements everywhere in our theme. This is related to the theme vision in #6649 (comment) This is not the same as theme-common, because it's not shared In general, we should have a good separation of micro layouts (https://web.dev/learn/design/micro-layouts/) vs macro layouts (https://web.dev/learn/design/macro-layouts/) and try to keep technical code out of these Design system components are particularly suited to be swizzled (eject + copy) Component users should not have to think about classes, but only props The design system should be well-encapsulated and prevent impossible/arbitrary UI states You might also like: |
||
function BreadcrumbsItem({ | ||
children, | ||
active, | ||
position, | ||
}: { | ||
children: ReactNode; | ||
active?: boolean; | ||
position?: string; | ||
}): JSX.Element { | ||
return ( | ||
<li | ||
itemScope | ||
itemProp="itemListElement" | ||
itemType="https://schema.org/ListItem" | ||
className={clsx('breadcrumbs__item', { | ||
'breadcrumbs__item--active': active, | ||
})}> | ||
{children} | ||
<meta itemProp="position" content={position} /> | ||
</li> | ||
); | ||
} | ||
|
||
function HomeBreadcrumbItem() { | ||
const homeHref = useBaseUrl('/'); | ||
return ( | ||
<BreadcrumbsItem> | ||
<BreadcrumbsItemLink href={homeHref}>🏠</BreadcrumbsItemLink> | ||
</BreadcrumbsItem> | ||
<li className="breadcrumbs__item"> | ||
Josh-Cena marked this conversation as resolved.
Show resolved
Hide resolved
|
||
<Link | ||
className={clsx('breadcrumbs__link', styles.breadcrumbsItemLink)} | ||
href={useBaseUrl('/')}> | ||
Josh-Cena marked this conversation as resolved.
Show resolved
Hide resolved
|
||
🏠 | ||
</Link> | ||
</li> | ||
); | ||
} | ||
|
||
|
@@ -71,10 +82,16 @@ export default function DocBreadcrumbs(): JSX.Element | null { | |
styles.breadcrumbsContainer, | ||
)} | ||
aria-label="breadcrumbs"> | ||
<ul className="breadcrumbs"> | ||
<ul | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. similarly, I didn't do it yet but this must be encapsulated under a |
||
className="breadcrumbs" | ||
itemScope | ||
itemType="https://schema.org/BreadcrumbList"> | ||
<HomeBreadcrumbItem /> | ||
{breadcrumbs.map((item, idx) => ( | ||
<BreadcrumbsItem key={idx} active={idx === breadcrumbs.length - 1}> | ||
<BreadcrumbsItem | ||
key={idx} | ||
active={idx === breadcrumbs.length - 1} | ||
position={String(idx + 1)}> | ||
<BreadcrumbsItemLink href={item.href}> | ||
{item.label} | ||
</BreadcrumbsItemLink> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we really need the extra span here and why?
Can't we apply "name" to the link directly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I've experimented. Without the span, the
name
is not correctly recognized.