Skip to content

Commit e060ed9

Browse files
reakaleekclaude
andcommitted
Sitemap: Exclude /docs/api/** URLs from sitemap generation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 96e731b commit e060ed9

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

src/services/Elastic.Documentation.Assembler/Building/SitemapBuilder.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public static void Generate(
2323
IDirectoryInfo outputFolder
2424
)
2525
{
26+
// TODO: Remove this exclusion when API docs are ready for sitemap inclusion
27+
var filtered = entries
28+
.Where(e => !e.Key.StartsWith("/docs/api/", StringComparison.Ordinal));
29+
2630
var doc = new XDocument
2731
{
2832
Declaration = new XDeclaration("1.0", "utf-8", "yes")
@@ -33,7 +37,7 @@ IDirectoryInfo outputFolder
3337
var root = new XElement(
3438
ns + "urlset",
3539
new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"),
36-
entries
40+
filtered
3741
.OrderBy(e => e.Key, StringComparer.Ordinal)
3842
.Select(e => new XElement(ns + "url", [
3943
new XElement(ns + "loc", new Uri(BaseUri, e.Key)),

tests/Elastic.Documentation.Build.Tests/SitemapTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,37 @@ public void Generate_OrdersUrlsAlphabetically()
9494
locs.Should().BeInAscendingOrder();
9595
}
9696

97+
[Fact]
98+
public void Generate_ExcludesApiDocsFromSitemap()
99+
{
100+
// Arrange
101+
var fs = new MockFileSystem();
102+
var outputDir = fs.DirectoryInfo.New("/output");
103+
104+
var now = DateTimeOffset.UtcNow;
105+
var entries = new Dictionary<string, DateTimeOffset>
106+
{
107+
["/docs/elasticsearch/getting-started"] = now,
108+
["/docs/api/elasticsearch/rest"] = now,
109+
["/docs/api/kibana/actions"] = now,
110+
["/docs/kibana/dashboard"] = now,
111+
};
112+
113+
// Act
114+
SitemapBuilder.Generate(entries, fs, outputDir);
115+
116+
// Assert
117+
var content = fs.File.ReadAllText(fs.Path.Join("/output", "sitemap.xml"));
118+
var doc = XDocument.Parse(content);
119+
XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
120+
121+
var locs = doc.Descendants(ns + "loc").Select(e => e.Value).ToList();
122+
locs.Should().HaveCount(2);
123+
locs.Should().NotContain(l => l.Contains("/docs/api/"));
124+
locs.Should().Contain("https://www.elastic.co/docs/elasticsearch/getting-started");
125+
locs.Should().Contain("https://www.elastic.co/docs/kibana/dashboard");
126+
}
127+
97128
[Fact]
98129
public void BuildSearchBody_FirstPage_HasPitButNoSearchAfter()
99130
{

0 commit comments

Comments
 (0)