fix: Add hreflang links to sitemap.xml (#1169)

This commit is contained in:
Caspian Zhao 2023-12-20 07:44:31 +00:00 committed by GitHub
parent 304f8e729b
commit 952199fed5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 8 deletions

View File

@ -3,9 +3,10 @@ import { NextRequest } from "next/server"
import { QueryClient } from "@tanstack/react-query"
import { defaultLocale, locales } from "~/i18n"
import { getSiteLink } from "~/lib/helpers"
import { NextServerResponse } from "~/lib/server-helper"
import { PageVisibilityEnum } from "~/lib/types"
import { ExpandedNote, PageVisibilityEnum } from "~/lib/types"
import { fetchGetPagesBySite } from "~/queries/page.server"
import { fetchGetSite } from "~/queries/site.server"
@ -46,18 +47,32 @@ export const GET = async (req: NextRequest) => {
subdomain: site?.handle || "",
domain: site?.metadata?.content?.custom_domain,
})
return response.headers({
"Content-Type": "text/xml",
// https://stackoverflow.com/questions/3272534/what-content-type-value-should-i-send-for-my-xml-sitemap
"Content-Type": "application/xml",
"Access-Control-Allow-Methods": "GET",
"Access-Control-Allow-Origin": "*",
}).text(`<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${pages.list?.map((page) => {
return ` <url>
<loc>${link}/${page.metadata.content.slug}</loc>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
${pages.list
?.map((page: ExpandedNote) => {
const location = `${link}/${page.metadata.content.slug}`
// https://developers.google.com/search/docs/specialty/international/localized-versions#example_2
const hreflangLinks = locales
.map((locale) => {
return `<xhtml:link rel="alternate" hreflang="${locale}" href="${location}?locale=${locale}"/>`
})
.join("\n")
return ` <url>
<loc>${location}</loc>
${hreflangLinks}
<xhtml:link rel="alternate" hreflang="x-default" href="${location}?locale=${defaultLocale}"/>
<lastmod>${dayjs(page.updatedAt).format("YYYY-MM-DD")}</lastmod>
</url>`
}).join(`
`)}
})
.join("\n")}
</urlset>`)
}