![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/public_html/ |
<?php
/**
* Dynamic Sitemap Generator for SoundStudioPro
* Generates XML sitemaps for tracks, artists, and other dynamic content
* Run this periodically via cron job for fresh content indexing
*/
require_once 'config/database.php';
// Set headers for XML output
header('Content-Type: application/xml; charset=utf-8');
// Get database connection
try {
$pdo = getDBConnection();
} catch (Exception $e) {
http_response_code(500);
echo '<?xml version="1.0" encoding="UTF-8"?><error>Database connection failed</error>';
exit;
}
// Generate tracks sitemap
function generateTracksSitemap($pdo) {
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"' . PHP_EOL;
$xml .= ' xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">' . PHP_EOL;
// Get recent public tracks for sitemap
$stmt = $pdo->prepare("
SELECT
mt.id,
mt.title,
mt.prompt,
mt.created_at,
mt.updated_at,
u.name as artist_name
FROM music_tracks mt
JOIN users u ON mt.user_id = u.id
WHERE mt.status = 'complete'
AND (mt.is_public = 1 OR mt.is_public IS NULL)
AND (mt.audio_url IS NOT NULL AND mt.audio_url != '' OR mt.variations_count > 0)
AND mt.title IS NOT NULL
AND mt.user_id IS NOT NULL
ORDER BY mt.created_at DESC
LIMIT 5000
");
$stmt->execute();
$tracks = $stmt->fetchAll();
foreach ($tracks as $track) {
$lastmod = max($track['created_at'], $track['updated_at'] ?? $track['created_at']);
$lastmod = date('Y-m-d', strtotime($lastmod));
$xml .= ' <url>' . PHP_EOL;
$xml .= ' <loc>https://soundstudiopro.com/track.php?id=' . $track['id'] . '</loc>' . PHP_EOL;
$xml .= ' <lastmod>' . $lastmod . '</lastmod>' . PHP_EOL;
$xml .= ' <changefreq>weekly</changefreq>' . PHP_EOL;
$xml .= ' <priority>0.6</priority>' . PHP_EOL;
$xml .= ' </url>' . PHP_EOL;
}
$xml .= '</urlset>';
file_put_contents('sitemap-tracks.xml', $xml);
return count($tracks);
}
// Generate artists sitemap
function generateArtistsSitemap($pdo) {
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
// Get active artists with public tracks
$stmt = $pdo->prepare("
SELECT DISTINCT
u.id,
u.name,
u.created_at,
u.updated_at,
COUNT(mt.id) as track_count
FROM users u
JOIN music_tracks mt ON u.id = mt.user_id
WHERE mt.status = 'complete'
AND (mt.is_public = 1 OR mt.is_public IS NULL)
AND (mt.audio_url IS NOT NULL AND mt.audio_url != '' OR mt.variations_count > 0)
AND u.name IS NOT NULL
AND mt.user_id IS NOT NULL
GROUP BY u.id, u.name, u.created_at, u.updated_at
HAVING track_count > 0
ORDER BY track_count DESC
LIMIT 2000
");
$stmt->execute();
$artists = $stmt->fetchAll();
foreach ($artists as $artist) {
$lastmod = max($artist['created_at'], $artist['updated_at'] ?? $artist['created_at']);
$lastmod = date('Y-m-d', strtotime($lastmod));
$xml .= ' <url>' . PHP_EOL;
$xml .= ' <loc>https://soundstudiopro.com/artist_profile.php?id=' . $artist['id'] . '</loc>' . PHP_EOL;
$xml .= ' <lastmod>' . $lastmod . '</lastmod>' . PHP_EOL;
$xml .= ' <changefreq>weekly</changefreq>' . PHP_EOL;
$xml .= ' <priority>0.5</priority>' . PHP_EOL;
$xml .= ' </url>' . PHP_EOL;
}
$xml .= '</urlset>';
file_put_contents('sitemap-artists.xml', $xml);
return count($artists);
}
// Generate keyword-based landing pages sitemap
function generateKeywordsSitemap() {
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
// SEO-optimized search terms for landing pages
$seo_keywords = [
'free+ai+music+generator',
'ai+music+software',
'music+production+software',
'beat+maker+software',
'ai+song+generator',
'royalty+free+music',
'music+creation+software',
'ai+music+composer',
'online+music+maker',
'free+music+software',
'ai+beat+maker',
'music+generator+app',
'artificial+intelligence+music',
'automated+music+creation',
'music+studio+software',
'digital+music+creator',
'music+composition+software',
'electronic+music+maker',
'hip+hop+beat+maker',
'pop+music+generator'
];
foreach ($seo_keywords as $keyword) {
$xml .= ' <url>' . PHP_EOL;
$xml .= ' <loc>https://soundstudiopro.com/community_fixed.php?search=' . $keyword . '</loc>' . PHP_EOL;
$xml .= ' <lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
$xml .= ' <changefreq>daily</changefreq>' . PHP_EOL;
$xml .= ' <priority>0.8</priority>' . PHP_EOL;
$xml .= ' </url>' . PHP_EOL;
}
$xml .= '</urlset>';
file_put_contents('sitemap-keywords.xml', $xml);
return count($seo_keywords);
}
// Generate sitemap index
function generateSitemapIndex() {
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$xml .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
$sitemaps = [
'sitemap.xml' => 'Main sitemap with static pages',
'sitemap-tracks.xml' => 'Music tracks sitemap',
'sitemap-artists.xml' => 'Artists profiles sitemap',
'sitemap-keywords.xml' => 'SEO keywords landing pages'
];
foreach ($sitemaps as $sitemap => $description) {
$xml .= ' <sitemap>' . PHP_EOL;
$xml .= ' <loc>https://soundstudiopro.com/' . $sitemap . '</loc>' . PHP_EOL;
$xml .= ' <lastmod>' . date('Y-m-d\TH:i:s+00:00') . '</lastmod>' . PHP_EOL;
$xml .= ' </sitemap>' . PHP_EOL;
}
$xml .= '</sitemapindex>';
file_put_contents('sitemap-index.xml', $xml);
}
// Check if running from command line or web
if (php_sapi_name() === 'cli') {
echo "Generating sitemaps for SoundStudioPro...\n";
$tracks_count = generateTracksSitemap($pdo);
echo "Generated sitemap-tracks.xml with {$tracks_count} tracks\n";
$artists_count = generateArtistsSitemap($pdo);
echo "Generated sitemap-artists.xml with {$artists_count} artists\n";
$keywords_count = generateKeywordsSitemap();
echo "Generated sitemap-keywords.xml with {$keywords_count} keyword pages\n";
generateSitemapIndex();
echo "Generated sitemap-index.xml\n";
echo "All sitemaps generated successfully!\n";
echo "Don't forget to submit sitemap-index.xml to Google Search Console\n";
} else {
// Web interface
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<status>' . PHP_EOL;
try {
$tracks_count = generateTracksSitemap($pdo);
$artists_count = generateArtistsSitemap($pdo);
$keywords_count = generateKeywordsSitemap();
generateSitemapIndex();
echo '<success>true</success>' . PHP_EOL;
echo '<tracks>' . $tracks_count . '</tracks>' . PHP_EOL;
echo '<artists>' . $artists_count . '</artists>' . PHP_EOL;
echo '<keywords>' . $keywords_count . '</keywords>' . PHP_EOL;
echo '<message>Sitemaps generated successfully</message>' . PHP_EOL;
} catch (Exception $e) {
echo '<success>false</success>' . PHP_EOL;
echo '<error>' . htmlspecialchars($e->getMessage()) . '</error>' . PHP_EOL;
}
echo '</status>';
}
?>