diff --git a/src/app/[locale]/site/[site]/sitemap.xml/route.ts b/src/app/[locale]/site/[site]/sitemap.xml/route.ts index 82fe4814..228ec065 100644 --- a/src/app/[locale]/site/[site]/sitemap.xml/route.ts +++ b/src/app/[locale]/site/[site]/sitemap.xml/route.ts @@ -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(` - - ${pages.list?.map((page) => { - return ` - ${link}/${page.metadata.content.slug} + + ${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 `` + }) + .join("\n") + + return ` + ${location} + ${hreflangLinks} + ${dayjs(page.updatedAt).format("YYYY-MM-DD")} ` - }).join(` - `)} + }) + .join("\n")} `) }