@@ -28,7 +28,8 @@ def _build_sitemap_xml(specs: list) -> str:
2828 '<?xml version="1.0" encoding="UTF-8"?>' ,
2929 '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' ,
3030 " <url><loc>https://anyplot.ai/</loc></url>" ,
31- " <url><loc>https://anyplot.ai/catalog</loc></url>" ,
31+ " <url><loc>https://anyplot.ai/plots</loc></url>" ,
32+ " <url><loc>https://anyplot.ai/specs</loc></url>" ,
3233 " <url><loc>https://anyplot.ai/mcp</loc></url>" ,
3334 " <url><loc>https://anyplot.ai/legal</loc></url>" ,
3435 " <url><loc>https://anyplot.ai/stats</loc></url>" ,
@@ -83,7 +84,7 @@ async def _refresh_sitemap() -> str:
8384
8485# Route through API for tracking (was: anyplot.ai/og-image.png)
8586DEFAULT_HOME_IMAGE = "https://api.anyplot.ai/og/home.png"
86- DEFAULT_CATALOG_IMAGE = "https://api.anyplot.ai/og/catalog .png"
87+ DEFAULT_PLOTS_IMAGE = "https://api.anyplot.ai/og/plots .png"
8788DEFAULT_DESCRIPTION = "library-agnostic, ai-powered plotting."
8889
8990
@@ -103,7 +104,7 @@ async def get_sitemap(db: AsyncSession | None = Depends(optional_db)):
103104 """
104105 Generate dynamic XML sitemap for SEO.
105106
106- Includes root, catalog page , and all specs with implementations.
107+ Includes root, plots/specs pages , and all specs with implementations.
107108 """
108109 if db is None :
109110 return Response (content = _STATIC_SITEMAP , media_type = "application/xml" )
@@ -143,15 +144,28 @@ async def seo_home(request: Request):
143144 )
144145
145146
146- @router .get ("/seo-proxy/catalog " )
147- async def seo_catalog ():
148- """Bot-optimized catalog page with correct og:tags."""
147+ @router .get ("/seo-proxy/plots " )
148+ async def seo_plots ():
149+ """Bot-optimized plots page with correct og:tags."""
149150 return HTMLResponse (
150151 BOT_HTML_TEMPLATE .format (
151- title = "Catalog | anyplot.ai" ,
152- description = "Browse all Python plotting specifications alphabetically. Find matplotlib, seaborn, plotly, bokeh, altair examples." ,
153- image = DEFAULT_CATALOG_IMAGE ,
154- url = "https://anyplot.ai/catalog" ,
152+ title = "plots | anyplot.ai" ,
153+ description = "Browse and filter Python visualization examples across 9 libraries: matplotlib, seaborn, plotly, bokeh, altair, plotnine, pygal, highcharts, lets-plot." ,
154+ image = DEFAULT_PLOTS_IMAGE ,
155+ url = "https://anyplot.ai/plots" ,
156+ )
157+ )
158+
159+
160+ @router .get ("/seo-proxy/specs" )
161+ async def seo_specs ():
162+ """Bot-optimized specs page with correct og:tags."""
163+ return HTMLResponse (
164+ BOT_HTML_TEMPLATE .format (
165+ title = "specs | anyplot.ai" ,
166+ description = "Browse all Python plotting specifications alphabetically." ,
167+ image = DEFAULT_PLOTS_IMAGE ,
168+ url = "https://anyplot.ai/specs" ,
155169 )
156170 )
157171
0 commit comments