mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-09-14 01:55:31 -04:00
publish sitemap.xml
with getServerSideProps instead of next-sitemap (#720)
very VERY hacky right now but I still prefer this
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,9 +2,6 @@
|
|||||||
/.next/
|
/.next/
|
||||||
/out/
|
/out/
|
||||||
|
|
||||||
# generated at build-time by next-sitemap
|
|
||||||
public/sitemap.xml
|
|
||||||
|
|
||||||
# node/npm/yarn
|
# node/npm/yarn
|
||||||
node_modules/
|
node_modules/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
const config = require("./lib/config");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
siteUrl: config.baseUrl || "",
|
|
||||||
changefreq: "weekly",
|
|
||||||
exclude: ["/feed.xml", "/feed.atom", "/site.webmanifest"],
|
|
||||||
};
|
|
@@ -16,7 +16,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env NODE_OPTIONS='--inspect' next dev",
|
"dev": "cross-env NODE_OPTIONS='--inspect' next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"postbuild": "next-sitemap",
|
|
||||||
"analyze": "cross-env ANALYZE=true next build",
|
"analyze": "cross-env ANALYZE=true next build",
|
||||||
"lint": "run-s lint:*",
|
"lint": "run-s lint:*",
|
||||||
"lint:next": "next lint",
|
"lint:next": "next lint",
|
||||||
@@ -47,7 +46,6 @@
|
|||||||
"next": "v12.0.8-canary.15",
|
"next": "v12.0.8-canary.15",
|
||||||
"next-mdx-remote": "^3.0.8",
|
"next-mdx-remote": "^3.0.8",
|
||||||
"next-seo": "^4.28.1",
|
"next-seo": "^4.28.1",
|
||||||
"next-sitemap": "^1.6.203",
|
|
||||||
"node-fetch": "^3.1.0",
|
"node-fetch": "^3.1.0",
|
||||||
"p-retry": "^5.0.0",
|
"p-retry": "^5.0.0",
|
||||||
"prop-types": "^15.8.0",
|
"prop-types": "^15.8.0",
|
||||||
|
70
pages/sitemap.xml.ts
Normal file
70
pages/sitemap.xml.ts
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
// WARNING: THIS FILE CONTAINS HISTORICAL LEVELS OF HACKINESS AND SHOULD NOT BE REPLICATED NOR ADMIRED.
|
||||||
|
|
||||||
|
import { getAllNotes } from "../lib/parse-notes";
|
||||||
|
import { baseUrl } from "../lib/config";
|
||||||
|
import type { GetServerSideProps } from "next";
|
||||||
|
|
||||||
|
const Sitemap = () => null;
|
||||||
|
|
||||||
|
type Page = {
|
||||||
|
relUrl: string;
|
||||||
|
priority?: number;
|
||||||
|
changeFreq?: string;
|
||||||
|
lastMod?: string | Date;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getServerSideProps: GetServerSideProps = async (context) => {
|
||||||
|
// TODO: make this not manual (serverless functions can't see /pages at runtime)
|
||||||
|
const pages: Page[] = [
|
||||||
|
{ relUrl: "/", priority: 1.0, changeFreq: "weekly" }, // homepage
|
||||||
|
{ relUrl: "/notes/" },
|
||||||
|
{ relUrl: "/birthday/" },
|
||||||
|
{ relUrl: "/cli/" },
|
||||||
|
{ relUrl: "/contact/" },
|
||||||
|
{ relUrl: "/hillary/" },
|
||||||
|
{ relUrl: "/leo/" },
|
||||||
|
{ relUrl: "/license/", priority: 0.1, changeFreq: "yearly" },
|
||||||
|
{ relUrl: "/previously/" },
|
||||||
|
{ relUrl: "/privacy/", priority: 0.1, changeFreq: "yearly" },
|
||||||
|
{ relUrl: "/projects/", changeFreq: "daily" },
|
||||||
|
{ relUrl: "/uses/" },
|
||||||
|
];
|
||||||
|
|
||||||
|
// push notes separately and use their metadata
|
||||||
|
getAllNotes().map((note) =>
|
||||||
|
pages.push({
|
||||||
|
relUrl: `/notes/${note.slug}/`,
|
||||||
|
// pull lastMod from front matter date
|
||||||
|
lastMod: note.date,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
${pages
|
||||||
|
.map(
|
||||||
|
(page) => `
|
||||||
|
<url>
|
||||||
|
<loc>${baseUrl}${page.relUrl}</loc>
|
||||||
|
<priority>${page.priority ? page.priority.toFixed(1) : 0.7}</priority>
|
||||||
|
<changefreq>${page.changeFreq || "monthly"}</changefreq>
|
||||||
|
<lastmod>${page.lastMod || new Date().toISOString()}</lastmod>
|
||||||
|
</url>`
|
||||||
|
)
|
||||||
|
.join("")
|
||||||
|
.trim()}
|
||||||
|
</urlset>`;
|
||||||
|
|
||||||
|
const { res } = context;
|
||||||
|
res.setHeader("content-type", "application/xml; charset=utf-8");
|
||||||
|
// cache on edge for one hour
|
||||||
|
res.setHeader("cache-control", "s-maxage=3600, stale-while-revalidate");
|
||||||
|
res.write(xml);
|
||||||
|
res.end();
|
||||||
|
|
||||||
|
return {
|
||||||
|
props: {},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Sitemap;
|
31
yarn.lock
31
yarn.lock
@@ -1038,11 +1038,6 @@
|
|||||||
"@babel/helper-validator-identifier" "^7.16.7"
|
"@babel/helper-validator-identifier" "^7.16.7"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@corex/deepmerge@^2.6.34":
|
|
||||||
version "2.6.148"
|
|
||||||
resolved "https://registry.yarnpkg.com/@corex/deepmerge/-/deepmerge-2.6.148.tgz#8fa825d53ffd1cbcafce1b6a830eefd3dcc09dd5"
|
|
||||||
integrity sha512-6QMz0/2h5C3ua51iAnXMPWFbb1QOU1UvSM4bKBw5mzdT+WtLgjbETBBIQZ+Sh9WvEcGwlAt/DEdRpIC3XlDBMA==
|
|
||||||
|
|
||||||
"@eslint/eslintrc@^1.0.5":
|
"@eslint/eslintrc@^1.0.5":
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318"
|
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318"
|
||||||
@@ -3734,16 +3729,16 @@ lint-staged@^12.1.5:
|
|||||||
yaml "^1.10.2"
|
yaml "^1.10.2"
|
||||||
|
|
||||||
listr2@^3.13.5:
|
listr2@^3.13.5:
|
||||||
version "3.13.5"
|
version "3.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f"
|
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
|
||||||
integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==
|
integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==
|
||||||
dependencies:
|
dependencies:
|
||||||
cli-truncate "^2.1.0"
|
cli-truncate "^2.1.0"
|
||||||
colorette "^2.0.16"
|
colorette "^2.0.16"
|
||||||
log-update "^4.0.0"
|
log-update "^4.0.0"
|
||||||
p-map "^4.0.0"
|
p-map "^4.0.0"
|
||||||
rfdc "^1.3.0"
|
rfdc "^1.3.0"
|
||||||
rxjs "^7.4.0"
|
rxjs "^7.5.1"
|
||||||
through "^2.3.8"
|
through "^2.3.8"
|
||||||
wrap-ansi "^7.0.0"
|
wrap-ansi "^7.0.0"
|
||||||
|
|
||||||
@@ -3880,13 +3875,6 @@ markdown-escapes@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
|
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
|
||||||
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
|
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
|
||||||
|
|
||||||
matcher@^4.0.0:
|
|
||||||
version "4.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/matcher/-/matcher-4.0.0.tgz#a42a05a09aaed92e2d241eb91fddac689461ea51"
|
|
||||||
integrity sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==
|
|
||||||
dependencies:
|
|
||||||
escape-string-regexp "^4.0.0"
|
|
||||||
|
|
||||||
mathml-tag-names@^2.1.3:
|
mathml-tag-names@^2.1.3:
|
||||||
version "2.1.3"
|
version "2.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
|
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
|
||||||
@@ -4056,15 +4044,6 @@ next-seo@^4.28.1:
|
|||||||
resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.28.1.tgz#c98ee559c8ab7196c62d0f6903afd7a8cde47a03"
|
resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.28.1.tgz#c98ee559c8ab7196c62d0f6903afd7a8cde47a03"
|
||||||
integrity sha512-WZgwdM+UhpNF3A37zFllzmPhnOVJ9vYeYlc0n3Z/kYfz/QQgy8NEdncNNggS9dU4JD8xriaCcyknhy5OsrFsJw==
|
integrity sha512-WZgwdM+UhpNF3A37zFllzmPhnOVJ9vYeYlc0n3Z/kYfz/QQgy8NEdncNNggS9dU4JD8xriaCcyknhy5OsrFsJw==
|
||||||
|
|
||||||
next-sitemap@^1.6.203:
|
|
||||||
version "1.6.203"
|
|
||||||
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-1.6.203.tgz#bfa2e67fea2bab1efed60cda743e7f98dc00bb46"
|
|
||||||
integrity sha512-WigcoqIUNbXQa2GnwOiCOydGx/XHCS4kRtIPNEsc8DGX2XvJtbAJKRxcidZZ2KihTAtwwCu1XQ4Hbof4mJbvLg==
|
|
||||||
dependencies:
|
|
||||||
"@corex/deepmerge" "^2.6.34"
|
|
||||||
matcher "^4.0.0"
|
|
||||||
minimist "^1.2.5"
|
|
||||||
|
|
||||||
next@v12.0.8-canary.15:
|
next@v12.0.8-canary.15:
|
||||||
version "12.0.8-canary.15"
|
version "12.0.8-canary.15"
|
||||||
resolved "https://registry.yarnpkg.com/next/-/next-12.0.8-canary.15.tgz#afe3aafac9eda2d7f5de81c1fac9a75b80a799d6"
|
resolved "https://registry.yarnpkg.com/next/-/next-12.0.8-canary.15.tgz#afe3aafac9eda2d7f5de81c1fac9a75b80a799d6"
|
||||||
@@ -4919,7 +4898,7 @@ run-parallel@^1.1.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
queue-microtask "^1.2.2"
|
queue-microtask "^1.2.2"
|
||||||
|
|
||||||
rxjs@^7.4.0:
|
rxjs@^7.5.1:
|
||||||
version "7.5.1"
|
version "7.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157"
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157"
|
||||||
integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==
|
integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==
|
||||||
|
Reference in New Issue
Block a user