News Sitemaps
News sitemaps help Google News discover and index your news articles. They're essential for news publishers who want their articles to appear in Google News.
Basic Usage
Add a news object to any route:
typescript
import type { Route } from "@pyyupsk/vite-plugin-sitemap";
export default [
{
url: "/news/breaking-story",
news: {
publication: {
name: "Example News",
language: "en",
},
publication_date: "2025-01-15T10:30:00Z",
title: "Breaking: Important Announcement",
},
},
] satisfies Route[];News Properties
typescript
interface News {
// Required
publication: NewsPublication;
publication_date: string;
title: string;
// Optional
keywords?: string;
stock_tickers?: string;
}
interface NewsPublication {
name: string;
language: string;
}Required Properties
publication
Information about the news publication:
typescript
{
publication: {
name: "Example News", // Publication name
language: "en" // ISO 639-1 language code
}
}publication_date
When the article was published (W3C Datetime):
typescript
{
publication_date: "2025-01-15T10:30:00Z";
}
// Or just the date
{
publication_date: "2025-01-15";
}title
The title of the news article (max 2,048 characters):
typescript
{
title: "Breaking: Major Tech Company Announces New Product";
}Optional Properties
keywords
Comma-separated list of keywords:
typescript
{
keywords: "technology, business, announcement, product launch";
}stock_tickers
Comma-separated stock tickers (max 5):
typescript
{
stock_tickers: "NASDAQ:GOOG, NASDAQ:AAPL";
}Full Example
typescript
import type { Route } from "@pyyupsk/vite-plugin-sitemap";
const now = new Date().toISOString();
export default [
{
url: "/news/tech-announcement",
lastmod: now,
news: {
publication: {
name: "Tech Daily",
language: "en",
},
publication_date: now,
title: "Major Tech Company Unveils Revolutionary New Product",
keywords: "technology, innovation, product launch, silicon valley",
stock_tickers: "NASDAQ:TECH",
},
},
{
url: "/news/market-update",
lastmod: now,
news: {
publication: {
name: "Tech Daily",
language: "en",
},
publication_date: now,
title: "Stock Markets React to Federal Reserve Decision",
keywords: "finance, stocks, federal reserve, economy",
stock_tickers: "NYSE:DJI, NASDAQ:IXIC, NYSE:SPX",
},
},
] satisfies Route[];Generated XML
xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
<url>
<loc>https://example.com/news/tech-announcement</loc>
<lastmod>2025-01-15T10:30:00.000Z</lastmod>
<news:news>
<news:publication>
<news:name>Tech Daily</news:name>
<news:language>en</news:language>
</news:publication>
<news:publication_date>2025-01-15T10:30:00.000Z</news:publication_date>
<news:title>Major Tech Company Unveils Revolutionary New Product</news:title>
<news:keywords>technology, innovation, product launch, silicon valley</news:keywords>
<news:stock_tickers>NASDAQ:TECH</news:stock_tickers>
</news:news>
</url>
</urlset>Dynamic News Generation
typescript
import type { Route } from "@pyyupsk/vite-plugin-sitemap";
export default async function getRoutes(): Promise<Route[]> {
// Fetch recent articles (last 2 days for Google News)
const articles = await fetch("https://api.example.com/articles?since=2d").then((r) => r.json());
return articles.map((article) => ({
url: `/news/${article.slug}`,
lastmod: article.updatedAt,
news: {
publication: {
name: "Example News",
language: article.language,
},
publication_date: article.publishedAt,
title: article.title,
keywords: article.tags.join(", "),
},
}));
}Multi-Language News
For publications in multiple languages:
typescript
import type { Route } from "@pyyupsk/vite-plugin-sitemap";
// English articles
export const newsEn: Route[] = [
{
url: "/en/news/article-1",
news: {
publication: {
name: "Global News",
language: "en",
},
publication_date: "2025-01-15",
title: "English Article Title",
},
},
];
// Spanish articles
export const newsEs: Route[] = [
{
url: "/es/noticias/articulo-1",
news: {
publication: {
name: "Global News",
language: "es",
},
publication_date: "2025-01-15",
title: "Título del Artículo en Español",
},
},
];Best Practices
- Fresh content only - Google News indexes articles from the past 2 days
- Accurate publication dates - Must match when the article was first published
- Original content - Don't include aggregated or syndicated content
- Unique titles - Each article should have a distinct, descriptive title
- Update frequently - Rebuild sitemap when new articles are published
- Use ISO 639-1 codes - For language (en, es, fr, de, etc.)
Google News Requirements
To be included in Google News:
- Your site must be accepted into Google News
- Articles must be original news content
- Publication must have a consistent name
- Articles should be timely (within 2 days)