# encoding: ascii # api: powershell # title: Write-Sitemap.ps1 # description: If you have a medium to large size website, you can provide a Sitemap so that search engines intelligently index your site’s content. # version: 1.0 # type: script # author: uknzguy # license: CC0 # x-poshcode-id: 833 # x-archived: 2016-04-19T06:39:28 # x-published: 2009-01-28T13:10:00 # # A Sitemap in it’s simplest form is an XML file containing a list of available URLs on your site. See sitemaps.org for more information on Sitemaps in general. # This script is intended as a starting point for generating a Sitemap for your site – since every website is different you will most likely need to customise it to make it work for you. # In it’s present form, this script generates a list of static URLs based on the contents of an array and also a list of product / location / items from a text file. This can be expanded as necessary to suit your requirements. # #################################################################################################### ## Write-Sitemap.ps1 ## ## Generates a basic Sitemap for your website, based on a list of locations / products or whatever, ## (depending on your requirements). Can easily be extended to create more complex Sitemaps. ## ## This uses XMLTextWriter and is based on the RSS creator script at ## http`://pshscripts.blogspot.com/2008/12/write-rssstreamps1.html ## ## Note the URLs in this script have been escaped. You may have to remove the backticks. #################################################################################################### ## Sitemap format, as output by this script (see http`://www.sitemaps.org/protocol.php for more) ## ## ## ## ## http`://your.url/here/product1 ## ## ## http`://your.url/here/product2 ## ## #################################################################################################### # Let's Set up some variables $workingdir = "c:\scripts" $Domain = "http`://www.somesite.url" # Base URL - CHANGE THIS! $path = "$workingdir\sitemap.xml" # Where the output file will go $Statics = @("help", "contact", "terms", "privacy") # Any static links go here $Locations = Get-Content "$workingdir\products.txt" # A list of product IDs $Counter = 0 # Keep track of how many URLs we include. Must be less than 50k per file. # This function does the bulk of the work, creating a new and element for each URL function CreateElement([string]$url) { $w = $global:writer $w.WriteStartElement("url") $w.WriteStartElement("loc") $w.WriteString($url) $w.WriteEndElement() #end loc $w.WriteEndElement() #end url $global:counter++ # Increment URL counter } #### MAIN ##### # Set up encoding, and create new instance of XMLTextWriter $encoding = [System.Text.Encoding]::UTF8 $writer = New-Object System.Xml.XmlTextWriter( $Path, $encoding ) $writer.Formatting = [system.xml.formatting]::indented Write-Host "`r`n`r`nGenerating $Domain Sitemap... $path" # Write start of XML document $writer.WriteStartDocument() # Write Start of sitemap doc $writer.WriteStartElement( "urlset" ) $writer.WriteAttributeString( "xmlns", "http`://www.sitemaps.org/schemas/sitemap/0.9" ) # Write our static URLs foreach ($static in $statics) { CreateElement "$Domain/$Static" } # Write all location URLs foreach ($Location in $Locations) { $r = "$domain/product/$location" CreateElement $r } # You could add more URL definitions here as needed... # Write end of document information $writer.WriteEndElement() # End urlset # Make sure we close the file $writer.close() # Let's see what it has done # cat $path # See how many elements were output Write-Host "`n`rTotal number of URLs : $Counter" # If this is more than 50,000 we should split into multiple sitemap files...