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 🙏

© 2026 – Pkg Stats / Ryan Hefner

express-meta-server

v1.0.6

Published

A reusable Express server for serving static files with dynamic meta tags

Readme

express-meta-server

express-meta-server is a lightweight Express.js middleware designed for dynamically injecting SEO meta tags into HTML pages. It fetches meta tag data from an API and serves pre-rendered HTML files with updated meta information, ensuring optimal SEO performance.

Why Use This?

Modern React (Vite) applications often face SEO challenges because search engines like Googlebot do not always execute JavaScript effectively. Tools like react-helmet modify meta tags only after JavaScript is loaded, which is not ideal for SEO. This package solves that issue by ensuring meta tags are pre-rendered in the initial HTML response, making content fully indexable by search engines.

Features

  • 🔥 Dynamic Meta Tags: Fetches SEO metadata from an API and injects it into HTML before serving.
  • 📂 Static File Serving: Serves pre-built HTML files from a dist folder.
  • 🌎 Custom URL Structures: Supports dynamic URL structures, ideal for multi-language & multi-country websites.
  • 🚀 SEO Optimized for Googlebot: Ensures correct indexing by providing fully rendered meta tags before page load.

✅ When to Use express-meta-server

  • Quick Meta Injection: If you want a fast way to inject meta tags without modifying your frontend, this middleware is useful.
  • Static Meta Needs: Works well for applications where meta tags don’t need complex logic.
  • Express Backend with a CSR Frontend: If your frontend is a client-side React app (CSR) and you need SEO-friendly pages for bots.

❌ Limitations

  • Not True SSR: This does not fully render pages but only modifies the <head> section.
  • Limited Control: If you need highly dynamic, API-driven meta tags, you might need more flexibility.
  • Doesn’t Replace Proper SSR (e.g., Next.js, Remix): If your goal is SEO, a framework that does full server-side rendering (SSR) is a better choice.

Installation

npm install express-meta-server

Usage

Basic Example

import express from "express";
import metaServer from "express-meta-server";

const app = express();

app.use(metaServer({
  apiUrl: "https://your-api.com/meta-tags", // API to fetch meta tags
  distFolder: "dist", // Folder containing static HTML files
}));

const PORT = process.env.PORT || 5173;
app.listen(PORT, () => {
  console.log(`🚀 Server running at http://localhost:${PORT}`);
});

How It Works

  1. Receives a request with a dynamic URL like /lv/en/about.
  2. Fetches meta tag data from your API.
  3. Injects meta tags directly into the corresponding HTML file before serving.
  4. Googlebot and other search engines receive the correct metadata, ensuring proper indexing and improved search rankings.

Configuration Options

| Option | Type | Description | |--------------|----------|-------------| | apiUrl | string | API endpoint to fetch meta tags. | | distFolder | string | Folder containing pre-built HTML files. |

Expected API Response Format

Your API should return meta tag details in the following format:

{
  "seo_title": "About YOUR_DOMAIN | Transforming Engagement in Latvia",
  "seo_description": "Discover how YOUR_DOMAIN in Latvia bridges the gap between experts and users.",
  "keywords": "YOUR_DOMAIN",
  "page_url": "https://YOUR_DOMAIN.com/lv/en/about"
}

Why Not react-helmet?

  • react-helmet only updates meta tags after JavaScript is loaded, which may not be processed correctly by search engines.
  • express-meta-server ensures meta tags are present in the initial HTML response, improving SEO and social media sharing previews.

License

MIT License © 2025