npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vite-ssg-seo-sitemap

v0.1.5

Published

Utilities to create a SEO friendly sitemap with vite-ssg.

Downloads

12

Readme

vite-ssg-seo-sitemap

Utilities to create a SEO friendly sitemap with vite-ssg.

When using vite-ssg in conjunction with vite-plugin-pages a typical route config looks like this:

import generatedRoutes from "~pages"

export const createApp = ViteSSG(
    App,
    { routes: generatedRoutes }
)

Your routes to navigate are to become something like:

/
/foo
/foo/bar
/bar/baz

Generating a sitemap with those paths will NOT lead to the correct pages being crawled by Googlebot etc. curl https://your.website/foo will be resolved SPA-style, thus not your generated foo.html file but your index.html will be served.

This package provides:

  • a utility method to add route.aliases to your routes pointing to their foo.html pendants so /foo and /foo.html are resolved to the same pages in your app,
  • a function to generate a sitemap off your dist directory by finding all .html files (the extensions are configurable).

Using both will result in the following paths being available

/

/foo
/foo.html (resolved like /foo)

/foo/bar
/foo/bar.html (resolved like /foo/bar)

/bar/baz
/bar/baz.html (resolved like /bar/baz)

Usage

Two steps must be taken.

Step 1: Add path.alias to the routes

The package exposes the extendRoute utility function for this. It can be used in your vite.config.(js|ts) or main.ts.

Option a: in vite.config.ts

// vite.config.(js|ts)
import Pages from "vite-plugin-pages"
import { generateSitemap, extendRoute } from "vite-ssg-seo-sitemap"

export default defineConfig({
    // your config
    plugins: [
        Pages({
            extendRoute(route) {
                // do what you need to do here
                // but make sure to use the imported extendRoute aswell
                return extendRoute(route)
            }
        })
    ]
})

Option b: in your main.ts

import generatedRoutes from "~pages"
import { extendRoute } from "vite-ssg-seo-sitemap"

export const createApp = ViteSSG(
    App,
    { routes: generatedRoutes.map(extendRoute) }
)

Step 2: Actually generate the sitemap on build

// vite.config.(js|ts)
import Pages from "vite-plugin-pages"
import { generateSitemap, extendRoute } from "vite-ssg-seo-sitemap"

export default defineConfig({
    // your config
    ssgOptions: {
        async onFinished() {
            await generateSitemap({
                hostname: "https://your.website",
            })
        },
    }
})

Configuration

Only generateSitemap can be configured with the following parameters.

hostname

type: string, required: true

Your website's full URL, including the scheme.

baseDir

type: string, required: false, default: process.cwd() + "/dist"

Directory to start crawling for files with the given extensions. Should be your directory containing your build, as the outFile will be generated there, too.

outFile

type: string, required: false, default: "sitemap.xml"

Name of the sitemap file to generate. Make sure it's .xml.

keepExtensions

type: boolean, required: false, default: true

Configure if you want to disable the extensions of your files in the sitemap.

extensions

type: string[], required: false, default: ["html"]

Extensions to crawl. If you want to include non-html files in your sitemap, this is your paremeter. A . will be automatically prepended for you if omitted here.