feat: sitemap.xml with dynamic name pages for SEO
SitemapController generates XML sitemap with all static pages + all registered name pages from chain. Cached 1 hour. 140+ name pages make each registered brand discoverable by search engines. Commit #101. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1e34701e71
commit
1a8adf46d5
2 changed files with 45 additions and 0 deletions
44
app/Website/Lethean/Controllers/SitemapController.php
Normal file
44
app/Website/Lethean/Controllers/SitemapController.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Website\Lethean\Controllers;
|
||||
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Mod\Chain\Services\DaemonRpc;
|
||||
|
||||
class SitemapController extends Controller
|
||||
{
|
||||
public function __invoke(DaemonRpc $rpc): \Illuminate\Http\Response
|
||||
{
|
||||
$sitemap = Cache::remember('sitemap.xml', 3600, function () use ($rpc) {
|
||||
$urls = [];
|
||||
|
||||
// Static pages
|
||||
foreach (['/', '/names', '/explorer', '/services', '/pricing', '/about', '/sunrise', '/status', '/docs', '/names/register', '/services/ssl', '/services/dns-hosting', '/services/residential-proxy', '/services/mobile-proxy', '/services/seo-traffic', '/network'] as $path) {
|
||||
$urls[] = ['loc' => "https://lthn.io{$path}", 'priority' => $path === '/' ? '1.0' : '0.8'];
|
||||
}
|
||||
|
||||
// Dynamic name pages
|
||||
$result = $rpc->getAllAliases();
|
||||
foreach (($result['aliases'] ?? []) as $alias) {
|
||||
$name = $alias['alias'] ?? '';
|
||||
if ($name) {
|
||||
$urls[] = ['loc' => "https://lthn.io/names/{$name}", 'priority' => '0.6'];
|
||||
}
|
||||
}
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
|
||||
foreach ($urls as $url) {
|
||||
$xml .= " <url><loc>{$url['loc']}</loc><priority>{$url['priority']}</priority></url>\n";
|
||||
}
|
||||
$xml .= '</urlset>';
|
||||
|
||||
return $xml;
|
||||
});
|
||||
|
||||
return response($sitemap, 200)->header('Content-Type', 'application/xml');
|
||||
}
|
||||
}
|
||||
|
|
@ -19,3 +19,4 @@ Route::get('/services/network', [HomeController::class, 'services'])->name('serv
|
|||
Route::get('/services/residential-proxy', [HomeController::class, 'residentialProxy'])->name('services.residential');
|
||||
Route::get('/services/mobile-proxy', [HomeController::class, 'mobileProxy'])->name('services.mobile');
|
||||
Route::get('/services/seo-traffic', [HomeController::class, 'seoTraffic'])->name('services.seo');
|
||||
Route::get('/sitemap.xml', \Website\Lethean\Controllers\SitemapController::class);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue