92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using System.Text;
|
|
using System.Xml.Linq;
|
|
using BCards.Web.Services;
|
|
|
|
namespace BCards.Web.Controllers;
|
|
|
|
public class SitemapController : Controller
|
|
{
|
|
private readonly IUserPageService _userPageService;
|
|
private readonly ILivePageService _livePageService;
|
|
private readonly ILogger<SitemapController> _logger;
|
|
|
|
public SitemapController(
|
|
IUserPageService userPageService,
|
|
ILivePageService livePageService,
|
|
ILogger<SitemapController> logger)
|
|
{
|
|
_userPageService = userPageService;
|
|
_livePageService = livePageService;
|
|
_logger = logger;
|
|
}
|
|
|
|
[Route("sitemap.xml")]
|
|
[ResponseCache(Duration = 86400)] // Cache for 24 hours
|
|
public async Task<IActionResult> Index()
|
|
{
|
|
try
|
|
{
|
|
// 🔥 NOVA FUNCIONALIDADE: Usar LivePages em vez de UserPages
|
|
var livePages = await _livePageService.GetAllActiveAsync();
|
|
|
|
var sitemap = new XDocument(
|
|
new XDeclaration("1.0", "utf-8", "yes"),
|
|
new XElement("urlset",
|
|
new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"),
|
|
|
|
// Add static pages
|
|
new XElement("url",
|
|
new XElement("loc", $"{Request.Scheme}://{Request.Host}/"),
|
|
new XElement("lastmod", DateTime.UtcNow.ToString("yyyy-MM-dd")),
|
|
new XElement("changefreq", "daily"),
|
|
new XElement("priority", "1.0")
|
|
),
|
|
new XElement("url",
|
|
new XElement("loc", $"{Request.Scheme}://{Request.Host}/Home/Pricing"),
|
|
new XElement("lastmod", DateTime.UtcNow.ToString("yyyy-MM-dd")),
|
|
new XElement("changefreq", "weekly"),
|
|
new XElement("priority", "0.9")
|
|
),
|
|
|
|
// Add live pages (SEO-optimized URLs only)
|
|
livePages.Select(page =>
|
|
new XElement("url",
|
|
new XElement("loc", $"{Request.Scheme}://{Request.Host}/page/{page.Category}/{page.Slug}"),
|
|
new XElement("lastmod", page.LastSyncAt.ToString("yyyy-MM-dd")),
|
|
new XElement("changefreq", "weekly"),
|
|
new XElement("priority", "0.8")
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
_logger.LogInformation($"Generated sitemap with {livePages.Count} live pages");
|
|
|
|
return Content(sitemap.ToString(), "application/xml", Encoding.UTF8);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error generating sitemap");
|
|
return StatusCode(500, "Error generating sitemap");
|
|
}
|
|
}
|
|
|
|
[Route("robots.txt")]
|
|
[ResponseCache(Duration = 86400)] // Cache for 24 hours
|
|
public IActionResult RobotsTxt()
|
|
{
|
|
var robotsTxt = $@"User-agent: *
|
|
Allow: /
|
|
Allow: /page/
|
|
|
|
Disallow: /Admin/
|
|
Disallow: /Auth/
|
|
Disallow: /Payment/
|
|
Disallow: /api/
|
|
|
|
Sitemap: {Request.Scheme}://{Request.Host}/sitemap.xml";
|
|
|
|
return Content(robotsTxt, "text/plain", Encoding.UTF8);
|
|
}
|
|
} |