1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-07-03 19:06:40 -04:00

fix query parameters being included in canonical URLs

This commit is contained in:
2022-01-03 14:43:36 -05:00
parent ebbb98bf09
commit 4fe47de9ae
3 changed files with 16 additions and 12 deletions

View File

@ -1,6 +1,4 @@
import { useRouter } from "next/router";
import { NextSeo } from "next-seo"; import { NextSeo } from "next-seo";
import * as config from "../lib/config";
import styles from "./Container.module.scss"; import styles from "./Container.module.scss";
@ -11,17 +9,13 @@ type Props = {
}; };
const Container = ({ title, description, children }: Props) => { const Container = ({ title, description, children }: Props) => {
const router = useRouter();
return ( return (
<> <>
<NextSeo <NextSeo
title={title} title={title}
description={description} description={description}
canonical={`${config.baseUrl}${router.asPath}`}
openGraph={{ openGraph={{
title: title, title: title,
url: `${config.baseUrl}${router.asPath}`,
}} }}
/> />
<div className={styles.container}>{children}</div> <div className={styles.container}>{children}</div>

View File

@ -21,6 +21,10 @@ import "../styles/index.scss";
const App = ({ Component, pageProps }: AppProps) => { const App = ({ Component, pageProps }: AppProps) => {
const router = useRouter(); const router = useRouter();
// get this page's URL with full domain, and hack around query parameters and anchors
// NOTE: this assumes trailing slashes are enabled in next.config.js
const canonical = `${config.baseUrl}${router.pathname === "/" ? "" : router.pathname}/`;
useEffect(() => { useEffect(() => {
// https://usefathom.com/docs/integrations/next // https://usefathom.com/docs/integrations/next
// https://vercel.com/guides/deploying-nextjs-using-fathom-analytics-with-vercel // https://vercel.com/guides/deploying-nextjs-using-fathom-analytics-with-vercel
@ -49,11 +53,11 @@ const App = ({ Component, pageProps }: AppProps) => {
defaultTitle={`${config.siteName} ${config.shortDescription}`} defaultTitle={`${config.siteName} ${config.shortDescription}`}
titleTemplate={`%s ${config.siteName}`} titleTemplate={`%s ${config.siteName}`}
description={config.longDescription} description={config.longDescription}
canonical={`${config.baseUrl}/`} canonical={canonical}
openGraph={{ openGraph={{
site_name: config.siteName, site_name: config.siteName,
title: `${config.siteName} ${config.shortDescription}`, title: `${config.siteName} ${config.shortDescription}`,
url: `${config.baseUrl}/`, url: canonical,
locale: config.siteLocale, locale: config.siteLocale,
type: "website", type: "website",
images: [ images: [

View File

@ -1,6 +1,7 @@
import fs from "fs"; import fs from "fs";
import path from "path"; import path from "path";
import matter from "gray-matter"; import matter from "gray-matter";
import { parseISO } from "date-fns";
import { MDXRemote } from "next-mdx-remote"; import { MDXRemote } from "next-mdx-remote";
import { serialize } from "next-mdx-remote/serialize"; import { serialize } from "next-mdx-remote/serialize";
import { NextSeo, ArticleJsonLd } from "next-seo"; import { NextSeo, ArticleJsonLd } from "next-seo";
@ -24,13 +25,15 @@ const Note = ({ source, frontMatter, slug }) => (
<NextSeo <NextSeo
title={frontMatter.title} title={frontMatter.title}
description={frontMatter.description} description={frontMatter.description}
canonical={`${config.baseUrl}/notes/${slug}/`}
openGraph={{ openGraph={{
title: frontMatter.title, title: frontMatter.title,
url: `${config.baseUrl}/notes/${slug}/`,
type: "article", type: "article",
article: { article: {
publishedTime: frontMatter.date, publishedTime: frontMatter.date,
}, },
images: [ images: frontMatter.image && [
{ {
url: `${config.baseUrl}${frontMatter.image}`, url: `${config.baseUrl}${frontMatter.image}`,
alt: frontMatter.title, alt: frontMatter.title,
@ -44,12 +47,12 @@ const Note = ({ source, frontMatter, slug }) => (
}} }}
/> />
<ArticleJsonLd <ArticleJsonLd
url={`${config.baseUrl}/notes/${slug}`} url={`${config.baseUrl}/notes/${slug}/`}
title={frontMatter.title} title={frontMatter.title}
description={frontMatter.description} description={frontMatter.description}
datePublished={frontMatter.date} datePublished={frontMatter.date}
dateModified={frontMatter.date} dateModified={frontMatter.date}
images={[`${config.baseUrl}${frontMatter.image}`]} images={frontMatter.image && [`${config.baseUrl}${frontMatter.image}`]}
authorName={[config.authorName]} authorName={[config.authorName]}
publisherName={config.siteName} publisherName={config.siteName}
publisherLogo={`${config.baseUrl}/static/images/me.jpg`} publisherLogo={`${config.baseUrl}/static/images/me.jpg`}
@ -92,7 +95,10 @@ export const getStaticProps: GetStaticProps = async ({ params }) => {
return { return {
props: { props: {
frontMatter: data, frontMatter: {
...data,
date: parseISO(data.date).toISOString(), // validate/normalize the date string provided from front matter
},
source: mdxSource, source: mdxSource,
slug: params.slug, slug: params.slug,
}, },