refactor: Update canonical URL building logic
This commit is contained in:
parent
f719d23be1
commit
df2d18d3d9
@ -4,7 +4,9 @@ export function buildPublicUrl(pageContext: PageContext, resource: string) {
|
|||||||
const { baseUrl } = pageContext;
|
const { baseUrl } = pageContext;
|
||||||
const url = new URL(
|
const url = new URL(
|
||||||
resource,
|
resource,
|
||||||
process.env.NODE_ENV === "production" ? "https://memento-dev.fr" : baseUrl,
|
process.env.NODE_ENV === "production"
|
||||||
|
? "https://memento-dev.fr"
|
||||||
|
: baseUrl || "http://localhost:5500",
|
||||||
).toString();
|
).toString();
|
||||||
|
|
||||||
return url;
|
return url;
|
||||||
|
|||||||
@ -1,13 +1,23 @@
|
|||||||
|
import { usePageContext } from "vike-solid/usePageContext";
|
||||||
import blurCyanImage from "@/images/blur-cyan.webp";
|
import blurCyanImage from "@/images/blur-cyan.webp";
|
||||||
|
import { buildPublicUrl } from "@/buildPublicUrl";
|
||||||
import logoUrl from "@/assets/logo.svg";
|
import logoUrl from "@/assets/logo.svg";
|
||||||
|
|
||||||
// https://vike.dev/Head
|
// https://vike.dev/Head
|
||||||
|
|
||||||
export default function HeadDefault() {
|
export default function HeadDefault() {
|
||||||
|
const pageContext = usePageContext();
|
||||||
|
|
||||||
|
const getCanonicalUrl = () => {
|
||||||
|
return buildPublicUrl(pageContext, pageContext.urlParsed.pathname);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<link rel="icon" href={logoUrl} />
|
<link rel="icon" href={logoUrl} />
|
||||||
|
|
||||||
|
<link rel="canonical" href={getCanonicalUrl()} />
|
||||||
|
|
||||||
<script
|
<script
|
||||||
defer
|
defer
|
||||||
src="https://cloud.umami.is/script.js"
|
src="https://cloud.umami.is/script.js"
|
||||||
|
|||||||
@ -1,8 +1,38 @@
|
|||||||
import type { OnPageTransitionEndAsync } from "vike/types";
|
import type { OnPageTransitionEndAsync, PageContext } from "vike/types";
|
||||||
|
|
||||||
|
import { buildPublicUrl } from "@/buildPublicUrl";
|
||||||
import NProgress from "nprogress";
|
import NProgress from "nprogress";
|
||||||
|
|
||||||
export const onPageTransitionEnd: OnPageTransitionEndAsync = async () => {
|
export const onPageTransitionEnd: OnPageTransitionEndAsync = async (
|
||||||
|
pageContext,
|
||||||
|
) => {
|
||||||
NProgress.done();
|
NProgress.done();
|
||||||
NProgress.remove();
|
NProgress.remove();
|
||||||
|
|
||||||
|
updateCanonicalTag(pageContext);
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateCanonicalTag = (pageContext: PageContext) => {
|
||||||
|
const canonicalTag = findOrCreateCanonicalTag();
|
||||||
|
const canonicalUrl = buildPublicUrl(
|
||||||
|
pageContext,
|
||||||
|
pageContext.urlParsed.pathname,
|
||||||
|
);
|
||||||
|
|
||||||
|
canonicalTag.href = canonicalUrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
const findOrCreateCanonicalTag = () => {
|
||||||
|
const head = document.head;
|
||||||
|
let canonicalTag: HTMLLinkElement | null = head.querySelector(
|
||||||
|
"link[rel=canonical]",
|
||||||
|
);
|
||||||
|
if (canonicalTag) return canonicalTag;
|
||||||
|
|
||||||
|
canonicalTag = document.createElement("link");
|
||||||
|
canonicalTag.rel = "canonical";
|
||||||
|
|
||||||
|
document.head.appendChild(canonicalTag);
|
||||||
|
|
||||||
|
return canonicalTag;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user