Skip to content

Instantly share code, notes, and snippets.

@artlung
Created October 14, 2009 21:42
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save artlung/210438 to your computer and use it in GitHub Desktop.
Save artlung/210438 to your computer and use it in GitHub Desktop.
Generate XML sitemap from list of urls
<?php
/**
*
* This is a quick way to turn a simple text file
* with a list of urls in a text file (sitemap-urls.txt)
* into a valid XML Sitemap:
* http://en.wikipedia.org/wiki/Sitemaps
* Put this file sitemap.xml.php and sitemap-urls.txt at
* the webroot http://example.com/sitemap.xml.php
* Then add the text in quotes below to your robots.txt file as a new line:
* "Sitemap: http://example.com/sitemap.xml.php"
* Questions? email joe@artlung.com
*/
$filename = 'sitemap-urls.txt';
$urls = file($filename);
$filectime = filectime($filename);
$urls = array_map('trim',$urls);
$sitemap = array();
foreach($urls as $url) {
if ($url != '') {
$priority = '0.5';
$sitemap[] = array(
'loc' => $url,
'lastmod' => date('Y-m-d',$filectime),
'changefreq' => 'weekly',
'priority' => $priority,
);
}
}
header('Content-Type: text/xml');
echo '<?xml version=\'1.0\' encoding=\'UTF-8\'?>';
echo "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
echo "\n";
foreach ($sitemap as $link) {
echo "\t<url>\n";
echo "\t\t<loc>" . htmlentities($link['loc']) . "</loc>\n";
echo "\t\t<lastmod>{$link['lastmod']}</lastmod>\n";
echo "\t\t<changefreq>{$link['changefreq']}</changefreq>\n";
echo "\t\t<priority>{$link['priority']}</priority>\n";
echo "\t</url>\n";
}
echo '</urlset>';
?>
@riyas-rawther
Copy link

Thank you, exactly what I was looking for. However, it looks like the doesn't update by itself daily. In order to have it updated, I need to save the sitemap-urls.txt file. There is a way hoe I can have this done automatically everyday?

You need a cron job + the source of the URLs (database/json or whatever) and a mofified php script like this...

@app19191
Copy link

Thank you, exactly what I was looking for. However, it looks like the doesn't update by itself daily. In order to have it updated, I need to save the sitemap-urls.txt file. There is a way hoe I can have this done automatically everyday?

You need a cron job + the source of the URLs (database/json or whatever) and a mofified php script like this...

Hi,

Thank you for your reply.

Do you have a working solution for this?

@Vision20202
Copy link

Hello,
thank you very much for your work! Is it possible to make script for case when URLs more than 50K? It requires index sitemap file.

@artlung
Copy link
Author

artlung commented May 10, 2022

@Vision20202 See https://gist.github.com/artlung/613e6ac577a170bf2b4b9045486f129e for a longer list of URLs. This breaks up the longer list up into chunks according to the rules for sizing.

@Vision20202
Copy link

I tried this version but received the following error:
Undefined index: page in .../sitemap/sitemap.xml.php on line 25

line 25: $page = (int)$_GET['page'];
Please help to solve the problem.

@Vision20202
Copy link

Thank you very much!
syntax error, unexpected '?' in ..../sitemap.xml.php on line 25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment