Add sitemap generation

astro
Kamran Ahmed 2 years ago
parent abbc661858
commit a2aff51deb
  1. 3
      astro.config.mjs
  2. 54
      sitemap.mjs
  3. 2
      src/guides/http-basic-authentication.md
  4. 16
      src/lib/sitemap.ts
  5. 2
      src/pages/404.astro

@ -1,5 +1,5 @@
import { defineConfig } from 'astro/config'; import { defineConfig } from 'astro/config';
import { shouldIndexPage } from './src/lib/sitemap'; import { serializeSitemap, shouldIndexPage } from './sitemap.mjs';
// https://astro.build/config // https://astro.build/config
import tailwind from '@astrojs/tailwind'; import tailwind from '@astrojs/tailwind';
@ -29,6 +29,7 @@ export default defineConfig({
}), }),
sitemap({ sitemap({
filter: shouldIndexPage, filter: shouldIndexPage,
serialize: serializeSitemap,
}), }),
], ],
}); });

@ -0,0 +1,54 @@
import path from 'node:path';
import fs from 'node:fs/promises';
async function getRoadmapIds() {
return fs.readdir(path.join(process.cwd(), 'src/roadmaps'));
}
export function shouldIndexPage(page) {
return ![
'https://roadmap.sh/404/',
'https://roadmap.sh/terms/',
'https://roadmap.sh/privacy/',
].includes(page);
}
export async function serializeSitemap(item) {
const highPriorityPages = [
'https://roadmap.sh/',
'https://roadmap.sh/about/',
'https://roadmap.sh/roadmaps/',
'https://roadmap.sh/guides/',
'https://roadmap.sh/videos/',
...(await getRoadmapIds()).map((id) => `https://roadmap.sh/${id}/`),
];
// Roadmaps and other high priority pages
for (let pageUrl of highPriorityPages) {
if (item.url === pageUrl) {
return {
...item,
// @ts-ignore
changefreq: 'monthly',
priority: 1,
lastmod: new Date().toISOString(),
};
}
}
// Guide and video pages
if (
item.url.startsWith('https://roadmap.sh/guides/') ||
item.url.startsWith('https://roadmap.sh/videos/')
) {
return {
...item,
// @ts-ignore
changefreq: 'monthly',
priority: 0.9,
lastmod: new Date().toISOString(),
};
}
return undefined;
}

@ -40,7 +40,7 @@ Now that we know what basic authentication is, the question is, how does it work
### Step 1 ### Step 1
When the browser first requests the server, the server tries to check the availability of the `Authorization` header in the request. Because it is the first request, no `Authorization` header is found in the request. So the server responds with the `401 Unauthorized` response code and also sends the `WWW-Authenticate` header with the value set to `Basic`, which tells the browser that it needs to trigger the basic authentication flow. When the browser first requests the server, the server tries to check the availability of the `Authorization` header in the request. Because it is the first request, no `Authorization` header is found in the request. So the server responds with the `401 Unauthorized` response code and also sends the `WWW-Authenticate` header with the value set to `Basic`, which tells the browser that it needs to trigger the basic authentication flow.
```plaintext ```
401 Unauthorized 401 Unauthorized
WWW-Authenticate: Basic realm='user_pages' WWW-Authenticate: Basic realm='user_pages'
``` ```

@ -1,16 +0,0 @@
import type { SitemapItem } from '@astrojs/sitemap';
export function shouldIndexPage(page: string): boolean {
return ![
'https://roadmap.sh/404/',
'https://roadmap.sh/terms/',
'https://roadmap.sh/privacy/',
].includes(page);
}
export function serialize(item: SitemapItem): SitemapItem {
console.log(item);
return {
...item,
};
}

@ -11,7 +11,7 @@ import BaseLayout from '../layouts/BaseLayout.astro';
<Icon icon='construction' class='hidden md:block' /> <Icon icon='construction' class='hidden md:block' />
<div class='text-left md:text-left'> <div class='text-left md:text-left'>
<h1 <h1
class='font-extrabold text-transparent leading-tight text-2xl md:text-5xl bg-clip-text bg-gradient-to-t from-black to-gray-600' class='font-extrabold text-transparent leading-4 text-2xl md:text-5xl bg-clip-text bg-gradient-to-t from-black to-gray-600'
> >
Page not found! Page not found!
</h1> </h1>

Loading…
Cancel
Save