Sitemap Configuration for AEO

The sitemap is your site's page inventory for AI crawlers. It tells them which pages exist, how important each page is relative to others, and when each page was last updated. AI crawlers with limited time budgets use priority values to determine which pages to fetch first. Accurate lastmod dates signal freshness — a factor that some AI systems weight when deciding whether to re-crawl for updates.

Priority Values Explained

Priority values range from 0.0 to 1.0 and indicate the relative importance of pages within your site. The following table shows recommended priority values for AEO optimization:

Page TypePriorityRationale
Homepage1.0Always the highest priority; the central hub of your entity
Entity core pages (about, trust)0.9Critical for establishing entity identity and authority
Product/service pages0.9Primary conversion and information pages
Hub pages (blog index, comparison index)0.85Navigation points that aggregate related content
Individual blog posts, comparison pages0.8Valuable content that supports entity expertise
FAQ page0.8Directly answers user queries in AI-friendly format
Legal pages (privacy, terms)0.3Required but not primary content for AI citations
Utility pages (search results, tags)0.2Low-value aggregation pages with thin content

Priority is relative within your own site, not absolute. A priority of 0.8 does not mean the page is 80% important — it means it is slightly less important than a 0.9 page on the same site. AI crawlers use these values to rank pages within a single domain for crawling order. When a crawler has limited time or resources to index your site, it will start with higher-priority pages and work downward. This makes correct prioritization essential for ensuring your most important content gets indexed.

Change Frequency

The changefreq element provides a hint about how often the content at a URL is likely to change. This helps crawlers estimate when to re-visit a page for updates.

Page TypeChange FrequencyNotes
HomepageweeklyOften updated with latest news or featured content
Product pagesweeklyIf you update pricing, features, or availability regularly
Blog postsmonthlyOr yearly for evergreen content that rarely changes
About/trust pagesmonthlyUpdated with new team members, certifications, or milestones
FAQmonthlyShould evolve as you receive new customer questions
Legal pagesyearlyRarely change unless regulations or policies update

Note that changefreq is a hint, not a command. Most modern crawlers rely more on lastmod dates to determine when content has actually changed. But including changefreq provides an additional signal that crawlers can use in their decision-making process, particularly when lastmod data is unavailable or appears unreliable.

lastModified Accuracy

The lastmod element is arguably the most important sitemap field for AEO. AI systems use lastmod to determine content freshness, which affects how they weight your content for different types of queries.

The lastmod dates must reflect actual content changes, not deployment dates. If you deploy your site daily but the content on a page has not changed, the lastmod should remain the date of the last actual content modification. A page with lastmod from three years ago will be weighted lower for freshness-sensitive queries — those where users expect recent information. For evergreen content, an older lastmod is acceptable because the content remains accurate regardless of age.

Automate lastmod updates when content changes. Many content management systems and static site generators can track content modification dates automatically. Do not set all pages to today's date on every deploy. AI systems detect this pattern and may ignore lastmod entirely for sites that exhibit it. Once a crawler determines your lastmod dates are unreliable, you lose the freshness signal advantage entirely.

Static XML Template

For sites without dynamic content generation, a static sitemap.xml file works well. Place this file at the root of your domain so it is accessible at yourdomain.com/sitemap.xml.

sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2024-03-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2024-02-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://example.com/products/enterprise-suite</loc>
    <lastmod>2024-03-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://example.com/blog</loc>
    <lastmod>2024-03-14</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://example.com/blog/ai-implementation-guide</loc>
    <lastmod>2024-03-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://example.com/faq</loc>
    <lastmod>2024-02-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://example.com/comparisons</loc>
    <lastmod>2024-03-05</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.85</priority>
  </url>
  <url>
    <loc>https://example.com/privacy-policy</loc>
    <lastmod>2023-06-15</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://example.com/terms-of-service</loc>
    <lastmod>2023-06-15</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://example.com/tags/automation</loc>
    <lastmod>2024-03-12</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.2</priority>
  </url>
</urlset>

Next.js Dynamic Sitemap

For Next.js applications, you can generate sitemaps dynamically using a sitemap route handler. This approach automatically includes new pages and pulls accurate lastModified dates from your data sources.

app/sitemap.ts
import { MetadataRoute } from 'next'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const baseUrl = 'https://example.com'

  const staticPages: MetadataRoute.Sitemap = [
    {
      url: baseUrl,
      lastModified: new Date('2024-03-15'),
      changeFrequency: 'weekly',
      priority: 1.0,
    },
    {
      url: `${baseUrl}/about`,
      lastModified: new Date('2024-02-20'),
      changeFrequency: 'monthly',
      priority: 0.9,
    },
    {
      url: `${baseUrl}/trust`,
      lastModified: new Date('2024-02-18'),
      changeFrequency: 'monthly',
      priority: 0.9,
    },
    {
      url: `${baseUrl}/faq`,
      lastModified: new Date('2024-02-28'),
      changeFrequency: 'monthly',
      priority: 0.8,
    },
    {
      url: `${baseUrl}/privacy-policy`,
      lastModified: new Date('2023-06-15'),
      changeFrequency: 'yearly',
      priority: 0.3,
    },
  ]

  const products = await getProducts()
  const productPages: MetadataRoute.Sitemap = products.map((product) => ({
    url: `${baseUrl}/products/${product.slug}`,
    lastModified: new Date(product.updatedAt),
    changeFrequency: 'weekly',
    priority: 0.9,
  }))

  const posts = await getBlogPosts()
  const blogPages: MetadataRoute.Sitemap = posts.map((post) => ({
    url: `${baseUrl}/blog/${post.slug}`,
    lastModified: new Date(post.updatedAt),
    changeFrequency: post.isEvergreen ? 'yearly' : 'monthly',
    priority: 0.8,
  }))

  return [...staticPages, ...productPages, ...blogPages]
}

This dynamic approach ensures your sitemap always reflects the current state of your site. When you add new products, publish new blog posts, or update existing content, the sitemap updates automatically with accurate metadata.

Submit Your Sitemap

Submit your sitemap to Google Search Console and Bing Webmaster Tools. While AI crawlers discover sitemaps via robots.txt, submitting to search engines ensures the broadest coverage across both traditional search and AI-powered features.

With your sitemap configured for optimal AI crawler consumption, the next step is implementing multi-language support if your entity serves international audiences. Continue to Multi-Language AEO to learn about hreflang configuration and language-specific schema implementation.