Standalone XML Sitemap Generator

1. Introduction

1. Requirements

  • The PHP XML generator will work with PHP 4.3.x or higher in default configuration in Apache web-server environment.
  • Sitemap generator connects to your website via http port 80, so your host should allow local network connections for php scripts (this is default configuration)
  • For file permissions requirements please refer to "Installation" section.
  • The memory size requirements (as well as the time required to complete sitemap generation) depends on the number of pages your website contains.

2. Installation

  1. Unpack the contents of distribution archive to the target folder on your server.
  2. Make sure to set the following files permissions:
    • config.inc.php - 0666 (rw-rw-rw-) (change it back to 0644 when setup is completed)
    • data/ folder - 0777 (rwxrwxrwx)
    • /path/to/your/sitemap.xml - 0666 (rw-rw-rw-) see below (3.14)
  3. If you want the sitemap to be build periodically (daily, weekly etc) you should setup the cron job to run the script using your hosting Control Panel. The command to use for cron job is shown on the "Crawling" page.

2.1 Upgrade

If you have previous version of Sitemap Generator already installed, the following steps are required:
  1. Unpack the contents of distribution archive and upload the following files to the target folder on your server:
    • index.php
    • all pages/* files

3. Configuration tips

  1. Use the full url of your site for the "Starting URL" option. The crawler will explore only the URLs within the starting directory, i.e. when starting URL is "http://www.example.com/path/index.html", the "http://www.example.com/path/sub/page.html" will be indexed, but "http://www.example.com/other/index.html" will NOT.
  2. "Save sitemap to" - is the filename in the "public_html/" folder of your website. This file should be writable by the script. To make sure it is, create this file and set its permissions to 0666.
  3. It is recommended to use "Server's repsonse" for "Last modification" field. In this case the entries for static pages will be filled with their real last modification time, while for dynamic pages the current time is used.
  4. "Do not parse" input field contains file types, separated by space. These files will be added to the sitemap, but not fetched to save bandwidth, because they are not html files and have no embedded links. Please make sure these files are indexed by Google since there is no sense in adding them to sitemap otherwise!
  5. "Do not parse URLs" works together with the option above to increase the speed of sitemap generation. If you are sure that some pages at your site do not contain the unique links to other pages, you can tell generator not to fetch them.
    For instance, if your site has "view article" pages with urls like "viewarticle.php?..", you may want to add them here, because most likely all links inside these pages are already listed at "higher level" (like the list of articles) documents as well:
    • viewarticle.php?id=

    If you are not sure what to write here, just leave this field empty. Please note that these pages are still included into sitemap.
  6. "Exclude extensions" - these files are not crawled and not included in sitemap.
  7. To disallow the part of your website from inclusion to the sitemap use "Exclude URLs" setting: all URLs that contain the strings specified will be skipped.
    For instance, to exclude all pages within "www.domain.com/folder/" add this line:
    • folder/

    If your site has pages with lists that can be reordered by columns and URLs look like "list.php?sort=column2", add this line to exclude duplicate content:
    • sort=

    Anyway, you may leave this box empty to get ALL pages listed.
  8. "Include ONLY URLs" setting is the opposite to "Exclude URLs". When it is not empty, ONLY the urls that match the substring entered are included into sitemap.
  9. "Individual attributes" setting allows you to set specific values for last modification time, frequency andpriority per page. To use it, define specific frequency and priority attributes in the following format: "url substring,lastupdate YYYY-mm-dd,frequency,priority".
    Example:
    page.php?product=,2005-11-14,monthly,0.9
  10. You may want to limit the number of pages to index to make sure it will not be endless if your website have an error like unlimited looped links.
  11. To limit the maximum running time of the script, define the "Maximum execution time" field (in seconds).
  12. To have a possibility to use "Resume session" feature, define the "Save the script state" field. This value means the intervals to save the crawler process state, so in case the script was interrupted, you can continue the process from the last saved point. Set this value to "0" to disable savings.
  13. To reduce the load on your server made by the sitemap generator, you can add the "sleep" delay after each N (configured) requests to your site for X seconds (configured). Leave blank ("0") values to crawls the site without delays.
  14. Google doesn't support sitemap files with more than 50,000 pages. That's why script supports "Sitemap Index" creation for the big sites. So, it will create one sitemap index file and multiple sitemap files with 50 thousand pages each.
    For instance, your website has about 140,000 pages. The XML sitemap generator will create these files:
    • "sitemap.xml" - sitemap index file that includes links to other files (filename depends on what you entered in the "Save sitemap to" field)
    • "sitemap1.xml" - sitemap file (URLs from 1 to 50,000)
    • "sitemap2.xml" - sitemap file (URLs from 50,001 to 100,000)
    • "sitemap3.xml" - sitemap file (URLs from 100,001 to 140,000)
    Please make sure all of these files are writable if your website is large.
  15. Enable "Create HTML Sitemap" option to let generator create a sitemap for your visitors. You should also define the "HTML Sitemap filename" where the sitemap will be stored. It is possible to split html sitemap onto multiple files by defining the "Number of links per page in HTML sitemap" option.
    The filenames are like the following:
    • "sitemap.html" - in case when all links fit in one file
      OR
    • "sitemap1.html" - site map file, page 1
    • "sitemap2.html" - site map file, page 2
    • etc

    Same as point above: please make sure all of these files are writable.

    The site map pages layout can be modified to suit to your website in pages/sitemap_tpl.html file.
    Besides modifying the stylesheet for html sitemap, you can change the way it is formatted. The basic template commands are:
    • <TLOOP XX>...</TLOOP> - defines a repeating sequence of code (like page numbers or sitemap links)
    • <TIF XX>...</TIF> - defines a conditional statement that is inserted only when a specific term is met
    • <TVAR XX> - inserts a value of a specified variable
    Please refer to sitemap_tpl.html file for usage example.
  16. Enable GZip compression of sitemap files to save on disk space and bandwidth. In this case ".gz" will be added to sitemap filenames (like "sitemap.xml.gz").
  17. "Sitemap URL" is the same file entered in "Save sitemap to" field, but in the URL form. It is required to inform Google about sitemap address.
  18. Set "Ping Google" checkbox enabled to let the script inform Google on every sitemap change. In this way you will always let google know about the fresh information on your site.
  19. If you want to restrict access to your generator pages, set the login and password here.

4. Usage

  1. The first step is the script "Configuration". The script will show you the alert messages if the problem is found (e.g., config file is not writable).
    Do not forget to save the settings for your website after making the changes.
  2. Try to crawl your site using "Crawling" page. Just press "Run" button and you will see the generation progress information, including:
    • Links depth
    • Current page
    • Pages scanned
    • Pages left
    • Time passed
    • Time left (estimated)
    Please be patient and wait for the crawling completion, for the large sites it may take significant time. Upon the completion the script will automatically redirect you to the "View Sitemap" page.
  3. For the large websites you may want to use "Run in background" option. In this case the crawler will keep working even after you will click on the other page or even closed your browser.
  4. When your previous session was interrupted by you or the script has been suspended by a system, you can resume the process from the last saved state. The time intervals for state saving is defined on the "Configuration" screen.
  5. Later on you may want to setup a cron job to refresh your sitemap (described above in the "Installation" section).
  6. When the generator script is running (either with cron or using "Run in background" feature), you will see it's progress state on "Crawling" page. There you will also find the link to stop the script, which is very useful for big sites because you don't have to wait until it is finished if you want to modify the configuration and re-run the script.
  7. On the "View Sitemap" page the content of the recently generated sitemap is displayed. For the large sites multiple parts are shown, including sitemap index and every sitemap file separately.
  8. When the sitemap is already generated, "Sitemap details" block appears in the left column of the pages. It contains a link to download xml sitemap and also a sitemap in text format (one URL per line). Some other details are also available:
    • Request date
    • Processing time (sec)
    • Pages indexed
    • Sitemap files
    • Pages size (Mb)
  9. "Analyze" feature allows you to easily investigate the site structure. It represents the tree-like list of directories of your website, indicating the number of pages in every folder. You can expand/collapse the tree parts by clicking the [x] signs.
  10. Sometimes it is very helpful to know the dynamics of the sites contents. The "ChangeLog" page shows the list of all crawling sessions, including:
    • Date/Time
    • Total pages
    • Proc.time, sec
    • Bandwidth, Mb
    • Number of New URLs
    • Number of Removed URLs
    • Number of Broken links
    You can click any of the sessions titles to see detailed page with the full list of "Added URLs" and "Removed URLs". As you may see, on this page you will easily track how website changes in time, which is especially useful for large dynamic, database-driven sites.
  11. One more feature that is naturally supported by website crawler is "Broken Links" list page. You will see all the pages URLs that were failed to load by the script (HTTP code 404 was returned) AND also corresponding list of pages that refer to the broken pages. Having this page on the screen you can easily fix this problem on your website.
  12. Concluding, if you will setup the cron job to run the Google sitemap creator script and enable "Inform Google" feature, everything will work automatically without a user interaction required.
    And you still can refer to interesting details at Analyze, ChangeLog, Broken Links and View Sitemap pages at any time.