Skip to content

Commit

Permalink
feat(v2): default canonical urls (#4109)
Browse files Browse the repository at this point in the history
  • Loading branch information
slorber authored Jan 28, 2021
1 parent 6917eb9 commit beddecb
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 20 deletions.
41 changes: 30 additions & 11 deletions packages/docusaurus-theme-classic/src/theme/LayoutHead/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
useTitleFormatter,
useAlternatePageUtils,
} from '@docusaurus/theme-common';
import {useLocation} from '@docusaurus/router';

// Useful for SEO
// See https://developers.google.com/search/docs/advanced/crawling/localized-versions
Expand All @@ -42,6 +43,32 @@ function AlternateLangHeaders(): JSX.Element {
);
}

// Default canonical url inferred from current page location pathname
function useDefaultCanonicalUrl() {
const {
siteConfig: {url: siteUrl},
} = useDocusaurusContext();
const {pathname} = useLocation();
return siteUrl + useBaseUrl(pathname);
}

function CanonicalUrlHeaders({permalink}: {permalink?: string}) {
const {
siteConfig: {url: siteUrl},
} = useDocusaurusContext();
const defaultCanonicalUrl = useDefaultCanonicalUrl();

const canonicalUrl = permalink
? `${siteUrl}${permalink}`
: defaultCanonicalUrl;
return (
<Head>
<meta property="og:url" content={canonicalUrl} />
<link rel="canonical" href={canonicalUrl} />
</Head>
);
}

export default function LayoutHead(props: Props): JSX.Element {
const {
siteConfig,
Expand All @@ -50,16 +77,8 @@ export default function LayoutHead(props: Props): JSX.Element {
const {
favicon,
themeConfig: {image: defaultImage, metadatas},
url: siteUrl,
} = siteConfig;
const {
title,
description,
image,
keywords,
permalink,
searchMetadatas,
} = props;
const {title, description, image, keywords, searchMetadatas} = props;
const metaTitle = useTitleFormatter(title);
const metaImage = image || defaultImage;
const metaImageUrl = useBaseUrl(metaImage, {absolute: true});
Expand Down Expand Up @@ -91,11 +110,11 @@ export default function LayoutHead(props: Props): JSX.Element {
{metaImage && (
<meta name="twitter:image:alt" content={`Image for ${metaTitle}`} />
)}
{permalink && <meta property="og:url" content={siteUrl + permalink} />}
{permalink && <link rel="canonical" href={siteUrl + permalink} />}
<meta name="twitter:card" content="summary_large_image" />
</Head>

<CanonicalUrlHeaders />

<AlternateLangHeaders />

<SearchMetadatas
Expand Down
5 changes: 1 addition & 4 deletions website/src/pages/feedback/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,7 @@ function Feedback() {
}, []);

return (
<Layout
permalink="/feedback"
title="Feedback"
description="Docusaurus 2 Feedback page">
<Layout title="Feedback" description="Docusaurus 2 Feedback page">
<main
className={clsx(
'container',
Expand Down
5 changes: 1 addition & 4 deletions website/src/pages/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,7 @@ function Home() {
const context = useDocusaurusContext();
const {siteConfig: {customFields = {}, tagline} = {}} = context;
return (
<Layout
permalink="/"
title={tagline}
description={customFields.description}>
<Layout title={tagline} description={customFields.description}>
<main>
<div className={styles.hero}>
<div className={styles.heroInner}>
Expand Down
1 change: 0 additions & 1 deletion website/src/pages/versions.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ function Version() {
return (
<Layout
title="Versions"
permalink="/versions"
description="Docusaurus 2 Versions page listing all documented site versions">
<main className="container margin-vert--lg">
<h1>Docusaurus documentation versions</h1>
Expand Down

0 comments on commit beddecb

Please sign in to comment.