Install
1
Install the plugin
$
npx claudepluginhub melodic-software/claude-code-plugins --plugin content-management-system

Want just this skill?

Add to a custom plugin, then install with one command.

Description

Generate sitemap and URL routing strategy. Creates XML sitemaps, URL patterns, and redirect rules.

Tool Access

This skill is limited to using the following tools:

ReadGlobGrepTaskSkillAskUserQuestion
Skill Content

Plan Sitemap Command

Generate a comprehensive sitemap and URL routing strategy for the CMS.

Usage

/cms:plan-sitemap --output xml
/cms:plan-sitemap --output tree --include-redirects
/cms:plan-sitemap --output yaml --priority-rules

Output Formats

  • xml: Standard XML sitemap (sitemap.xml)
  • json: JSON sitemap for APIs
  • tree: Visual ASCII tree structure
  • yaml: Structured configuration

Workflow

Step 1: Parse Arguments

Extract output format and options from command.

Step 2: Analyze Site Structure

Read existing content types and page definitions:

  • Content types with routes
  • Page hierarchies
  • Taxonomy structures
  • Dynamic route patterns

Step 3: Invoke Skills

Invoke relevant skills:

  • url-routing-patterns - URL conventions
  • page-structure-design - Page hierarchy
  • navigation-architecture - Navigation structure

Step 4: Generate URL Strategy

URL Pattern Rules:

url_patterns:
  # Static pages
  static:
    home: /
    about: /about
    contact: /contact
    privacy: /privacy-policy
    terms: /terms-of-service

  # Content types
  content_types:
    Article:
      pattern: /blog/{year}/{month}/{slug}
      example: /blog/2025/01/getting-started

    Product:
      pattern: /products/{category}/{slug}
      example: /products/electronics/wireless-headphones

    Category:
      pattern: /products/{slug}
      example: /products/electronics

    Author:
      pattern: /authors/{slug}
      example: /authors/jane-smith

    Page:
      pattern: /{*slug}  # Catch-all for CMS pages
      example: /about/team/leadership

  # Taxonomies
  taxonomies:
    tags:
      pattern: /tags/{slug}
      example: /tags/technology

    categories:
      pattern: /categories/{slug}
      example: /categories/news

  # Localization
  localization:
    enabled: true
    pattern: /{locale}/{path}
    default_locale: en
    supported: [en, es, fr, de]

  # API routes (excluded from sitemap)
  api:
    pattern: /api/{version}/{resource}
    exclude_from_sitemap: true

Step 5: Generate Sitemap

XML Sitemap:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">

  <!-- Homepage -->
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2025-01-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/" />
    <xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/" />
  </url>

  <!-- Blog posts -->
  <url>
    <loc>https://example.com/blog/2025/01/getting-started</loc>
    <lastmod>2025-01-15</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://cdn.example.com/images/getting-started.jpg</image:loc>
      <image:title>Getting Started Guide</image:title>
    </image:image>
  </url>

  <!-- Products -->
  <url>
    <loc>https://example.com/products/electronics/wireless-headphones</loc>
    <lastmod>2025-01-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>

</urlset>

Sitemap Index (for large sites):

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemaps/pages.xml</loc>
    <lastmod>2025-01-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemaps/products.xml</loc>
    <lastmod>2025-01-14</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemaps/blog.xml</loc>
    <lastmod>2025-01-15</lastmod>
  </sitemap>
</sitemapindex>

Tree Output:

SITEMAP STRUCTURE
=================

/ (Home)
├── /about
│   ├── /about/team
│   ├── /about/careers
│   └── /about/press
├── /products
│   ├── /products/electronics
│   │   ├── /products/electronics/headphones
│   │   └── /products/electronics/speakers
│   └── /products/clothing
├── /blog
│   ├── /blog/2025/01/...
│   └── /blog/2024/12/...
├── /contact
├── /privacy-policy
└── /terms-of-service

Legend:
  [S] Static page
  [D] Dynamic content type
  [T] Taxonomy listing

Step 6: Generate Redirect Rules

Redirect Configuration:

redirects:
  # Permanent redirects (301)
  permanent:
    - from: /old-about
      to: /about

    - from: /blog/{slug}
      to: /blog/2024/01/{slug}
      note: Legacy URL pattern

    - from: /products/{id:int}
      to: /products/legacy/{id}
      note: Numeric ID to slug migration

  # Temporary redirects (302)
  temporary:
    - from: /sale
      to: /products?filter=sale
      expires: 2025-02-28

  # Regex patterns
  patterns:
    - from: ^/category/(.*)$
      to: /categories/$1
      type: 301

  # Trailing slash normalization
  trailing_slash:
    enforce: false  # No trailing slash
    redirect_type: 301

  # Case normalization
  case_sensitivity:
    lowercase: true
    redirect_type: 301

Step 7: Generate Priority Rules

SEO Priority Configuration:

priority_rules:
  # By content type
  content_types:
    Page:
      default: 0.8
      homepage: 1.0

    Product:
      default: 0.9
      featured: 1.0
      out_of_stock: 0.3

    Article:
      default: 0.7
      featured: 0.9
      age_decay:
        after_days: 90
        minimum: 0.4

  # By depth
  depth:
    - level: 1
      priority: 0.9
    - level: 2
      priority: 0.7
    - level: 3
      priority: 0.5
    - level: 4+
      priority: 0.3

  # Change frequency
  changefreq:
    homepage: daily
    product_listing: daily
    product_detail: weekly
    blog_post: monthly
    static_page: yearly

Implementation

public interface ISitemapGenerator
{
    Task<string> GenerateXmlAsync(SitemapOptions options);
    Task<SitemapIndex> GenerateIndexAsync();
    Task<IEnumerable<SitemapUrl>> GetUrlsAsync(ContentType type);
}

public class SitemapUrl
{
    public string Loc { get; set; }
    public DateTime LastMod { get; set; }
    public ChangeFrequency ChangeFreq { get; set; }
    public decimal Priority { get; set; }
    public List<AlternateLink> Alternates { get; set; }
    public List<ImageInfo> Images { get; set; }
}

Related Skills

  • url-routing-patterns - URL conventions
  • page-structure-design - Page hierarchy
  • navigation-architecture - Site structure
Stats
Stars40
Forks6
Last CommitMar 17, 2026
Actions

Similar Skills