Browse Source

Implement sitemap.xml and robots.txt

master
Riyyi 2 weeks ago
parent
commit
9bbbb80e75
  1. 5
      content.config.ts
  2. 3
      nuxt.config.ts
  3. 269
      package-lock.json
  4. 2
      package.json
  5. 1
      public/robots.txt
  6. 5
      src/pages/articles/[slug].vue

5
content.config.ts

@ -1,11 +1,13 @@
import { defineContentConfig, defineCollection, z } from '@nuxt/content' import { defineContentConfig, defineCollection, z } from '@nuxt/content'
import { asSitemapCollection } from "@nuxtjs/sitemap/content"
// Lookup resolved from path: rootDir/content // Lookup resolved from path: rootDir/content
// see: https://github.com/nuxt/content/issues/3161 // see: https://github.com/nuxt/content/issues/3161
export default defineContentConfig({ export default defineContentConfig({
collections: { collections: {
content: defineCollection({ content: defineCollection(
asSitemapCollection({
type: "page", type: "page",
source: "**/*.md", source: "**/*.md",
schema: z.object({ schema: z.object({
@ -14,5 +16,6 @@ export default defineContentConfig({
tags: z.array(z.string()), tags: z.array(z.string()),
}) })
}) })
)
} }
}); });

3
nuxt.config.ts

@ -38,6 +38,8 @@ export default defineNuxtConfig({
modules: [ modules: [
"@nuxt/content", "@nuxt/content",
"@nuxt/eslint", "@nuxt/eslint",
"@nuxtjs/robots",
"@nuxtjs/sitemap",
"@pinia/nuxt", "@pinia/nuxt",
"pinia-plugin-persistedstate/nuxt", "pinia-plugin-persistedstate/nuxt",
"unplugin-icons/nuxt" "unplugin-icons/nuxt"
@ -52,6 +54,7 @@ export default defineNuxtConfig({
secure: process.env.NODE_ENV !== "development" // only send over HTTPS secure: process.env.NODE_ENV !== "development" // only send over HTTPS
} }
}, },
site: { url: "https://riyyi.com", name: "Personal Website" },
srcDir: "src/", srcDir: "src/",
ssr: false, ssr: false,
typescript: { typescript: {

269
package-lock.json generated

@ -22,6 +22,8 @@
"@iconify-json/fa-solid": "^1.2.1", "@iconify-json/fa-solid": "^1.2.1",
"@nuxt/content": "^3.4.0", "@nuxt/content": "^3.4.0",
"@nuxt/eslint": "^1.2.0", "@nuxt/eslint": "^1.2.0",
"@nuxtjs/robots": "^5.2.9",
"@nuxtjs/sitemap": "^7.2.10",
"@types/bootstrap": "^5.2.10", "@types/bootstrap": "^5.2.10",
"@vue/language-server": "^2.1.10", "@vue/language-server": "^2.1.10",
"@vue/typescript-plugin": "^2.1.10", "@vue/typescript-plugin": "^2.1.10",
@ -1642,6 +1644,136 @@
"vfile": "^6.0.3" "vfile": "^6.0.3"
} }
}, },
"node_modules/@nuxtjs/robots": {
"version": "5.2.9",
"resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-5.2.9.tgz",
"integrity": "sha512-JJykE1llIByw8vqhrn4abSPyAcEFnfVOkIaD2/XLwkhNeZHzAQT2/p+ZhqwtaSMyWq8pnW1y0ei7gQYdCqOu+g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.16.2",
"consola": "^3.4.2",
"defu": "^6.1.4",
"nuxt-site-config": "^3.1.9",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"sirv": "^3.0.1",
"std-env": "^3.9.0",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@nuxtjs/robots/node_modules/@nuxt/kit": {
"version": "3.16.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.16.2.tgz",
"integrity": "sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw==",
"dev": true,
"license": "MIT",
"dependencies": {
"c12": "^3.0.2",
"consola": "^3.4.2",
"defu": "^6.1.4",
"destr": "^2.0.3",
"errx": "^0.1.0",
"exsolve": "^1.0.4",
"globby": "^14.1.0",
"ignore": "^7.0.3",
"jiti": "^2.4.2",
"klona": "^2.0.6",
"knitwork": "^1.2.0",
"mlly": "^1.7.4",
"ohash": "^2.0.11",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"scule": "^1.3.0",
"semver": "^7.7.1",
"std-env": "^3.8.1",
"ufo": "^1.5.4",
"unctx": "^2.4.1",
"unimport": "^4.1.3",
"untyped": "^2.0.0"
},
"engines": {
"node": ">=18.12.0"
}
},
"node_modules/@nuxtjs/sitemap": {
"version": "7.2.10",
"resolved": "https://registry.npmjs.org/@nuxtjs/sitemap/-/sitemap-7.2.10.tgz",
"integrity": "sha512-7w1Ys2XIE/QVTJn5dbt2p/hrmDoGO9Ay1S3o6LI5M/MDRzKPvnXi5ByRUcc7Sfa3LUpLad5/w4IOQ4lyxhq9Hw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nuxt/devtools-kit": "^2.3.2",
"@nuxt/kit": "^3.16.2",
"chalk": "^5.4.1",
"defu": "^6.1.4",
"h3-compression": "^0.3.2",
"nuxt-site-config": "^3.1.9",
"ofetch": "^1.4.1",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"radix3": "^1.1.2",
"semver": "^7.7.1",
"sirv": "^3.0.1",
"ufo": "^1.5.4"
},
"engines": {
"node": ">=18.0.0"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@nuxtjs/sitemap/node_modules/@nuxt/kit": {
"version": "3.16.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.16.2.tgz",
"integrity": "sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw==",
"dev": true,
"license": "MIT",
"dependencies": {
"c12": "^3.0.2",
"consola": "^3.4.2",
"defu": "^6.1.4",
"destr": "^2.0.3",
"errx": "^0.1.0",
"exsolve": "^1.0.4",
"globby": "^14.1.0",
"ignore": "^7.0.3",
"jiti": "^2.4.2",
"klona": "^2.0.6",
"knitwork": "^1.2.0",
"mlly": "^1.7.4",
"ohash": "^2.0.11",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"scule": "^1.3.0",
"semver": "^7.7.1",
"std-env": "^3.8.1",
"ufo": "^1.5.4",
"unctx": "^2.4.1",
"unimport": "^4.1.3",
"untyped": "^2.0.0"
},
"engines": {
"node": ">=18.12.0"
}
},
"node_modules/@nuxtjs/sitemap/node_modules/chalk": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@oxc-parser/binding-linux-x64-gnu": { "node_modules/@oxc-parser/binding-linux-x64-gnu": {
"version": "0.56.5", "version": "0.56.5",
"cpu": [ "cpu": [
@ -5873,6 +6005,19 @@
"uncrypto": "^0.1.3" "uncrypto": "^0.1.3"
} }
}, },
"node_modules/h3-compression": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/h3-compression/-/h3-compression-0.3.2.tgz",
"integrity": "sha512-B+yCKyDRnO0BXSfjAP4tCXJgJwmnKp3GyH5Yh66mY9KuOCrrGQSPk/gBFG2TgH7OyB/6mvqNZ1X0XNVuy0qRsw==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/codedredd"
},
"peerDependencies": {
"h3": "^1.6.0"
}
},
"node_modules/h3/node_modules/cookie-es": { "node_modules/h3/node_modules/cookie-es": {
"version": "1.2.2", "version": "1.2.2",
"dev": true, "dev": true,
@ -8425,6 +8570,110 @@
"nuxt-component-meta": "bin/nuxt-component-meta.mjs" "nuxt-component-meta": "bin/nuxt-component-meta.mjs"
} }
}, },
"node_modules/nuxt-site-config": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-3.1.9.tgz",
"integrity": "sha512-YB69GX0st8drv1d5xypweseiEWeR22tfGdyVH3U4R+mpUSz8paBx48ArKC6MgV22DKItoQm51LVoapF5pl5bEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.16.2",
"nuxt-site-config-kit": "3.1.9",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"sirv": "^3.0.1",
"site-config-stack": "3.1.9",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/nuxt-site-config-kit": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-3.1.9.tgz",
"integrity": "sha512-bcmpajYJgkNzA0jTq6CmmhKF2wHZUUKeVx/CIGI8lwWuAD81EBUZN0T4iKvVDo54g9UBrUUl8/5GhD65YBBG0A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@nuxt/kit": "^3.16.2",
"pkg-types": "^2.1.0",
"site-config-stack": "3.1.9",
"std-env": "^3.9.0",
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": {
"version": "3.16.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.16.2.tgz",
"integrity": "sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw==",
"dev": true,
"license": "MIT",
"dependencies": {
"c12": "^3.0.2",
"consola": "^3.4.2",
"defu": "^6.1.4",
"destr": "^2.0.3",
"errx": "^0.1.0",
"exsolve": "^1.0.4",
"globby": "^14.1.0",
"ignore": "^7.0.3",
"jiti": "^2.4.2",
"klona": "^2.0.6",
"knitwork": "^1.2.0",
"mlly": "^1.7.4",
"ohash": "^2.0.11",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"scule": "^1.3.0",
"semver": "^7.7.1",
"std-env": "^3.8.1",
"ufo": "^1.5.4",
"unctx": "^2.4.1",
"unimport": "^4.1.3",
"untyped": "^2.0.0"
},
"engines": {
"node": ">=18.12.0"
}
},
"node_modules/nuxt-site-config/node_modules/@nuxt/kit": {
"version": "3.16.2",
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.16.2.tgz",
"integrity": "sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw==",
"dev": true,
"license": "MIT",
"dependencies": {
"c12": "^3.0.2",
"consola": "^3.4.2",
"defu": "^6.1.4",
"destr": "^2.0.3",
"errx": "^0.1.0",
"exsolve": "^1.0.4",
"globby": "^14.1.0",
"ignore": "^7.0.3",
"jiti": "^2.4.2",
"klona": "^2.0.6",
"knitwork": "^1.2.0",
"mlly": "^1.7.4",
"ohash": "^2.0.11",
"pathe": "^2.0.3",
"pkg-types": "^2.1.0",
"scule": "^1.3.0",
"semver": "^7.7.1",
"std-env": "^3.8.1",
"ufo": "^1.5.4",
"unctx": "^2.4.1",
"unimport": "^4.1.3",
"untyped": "^2.0.0"
},
"engines": {
"node": ">=18.12.0"
}
},
"node_modules/nuxt/node_modules/estree-walker": { "node_modules/nuxt/node_modules/estree-walker": {
"version": "3.0.3", "version": "3.0.3",
"dev": true, "dev": true,
@ -10419,6 +10668,22 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/site-config-stack": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-3.1.9.tgz",
"integrity": "sha512-ed53+wLi+36SGqidU+YUpl7f1OHClPLmvUJ/aYZny1dCBnXvOsuFottrMkXDIK2N5UaMED9mz8KrRZTk94ARCg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ufo": "^1.5.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
},
"peerDependencies": {
"vue": "^3"
}
},
"node_modules/skin-tone": { "node_modules/skin-tone": {
"version": "2.0.0", "version": "2.0.0",
"dev": true, "dev": true,
@ -10620,7 +10885,9 @@
} }
}, },
"node_modules/std-env": { "node_modules/std-env": {
"version": "3.8.1", "version": "3.9.0",
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
"integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/streamx": { "node_modules/streamx": {

2
package.json

@ -25,6 +25,8 @@
"@iconify-json/fa-solid": "^1.2.1", "@iconify-json/fa-solid": "^1.2.1",
"@nuxt/content": "^3.4.0", "@nuxt/content": "^3.4.0",
"@nuxt/eslint": "^1.2.0", "@nuxt/eslint": "^1.2.0",
"@nuxtjs/robots": "^5.2.9",
"@nuxtjs/sitemap": "^7.2.10",
"@types/bootstrap": "^5.2.10", "@types/bootstrap": "^5.2.10",
"@vue/language-server": "^2.1.10", "@vue/language-server": "^2.1.10",
"@vue/typescript-plugin": "^2.1.10", "@vue/typescript-plugin": "^2.1.10",

1
public/robots.txt

@ -1 +0,0 @@

5
src/pages/articles/[slug].vue

@ -69,8 +69,5 @@ const { data: article } = await useAsyncData<ContentCollectionItem | null>(
() => queryCollection("content").path("/articles/" + params.slug).first() () => queryCollection("content").path("/articles/" + params.slug).first()
); );
useSeoMeta({ useSeoMeta(article.value?.seo || {});
title: article.value?.title,
description: article.value?.description
})
</script> </script>

Loading…
Cancel
Save