Im Rahmen meiner SEO Tätigkeiten für die Minerva Website (die auf Sharepoint 2010 Foundationbasiert) bin ich über die Google und Bing Webmaster Tools gestolpert. Nettes Zeugs, das ich eventuell später einmal behandle. Jedenfalls kann man dort eine Sitemap angeben und die Spider der Suchmaschinen davon überzeugen die eigene Website zu crawlen. Es gibt eine Menge Online Tools die das tun, aber SharePoint hat eben auch viele URL’s die man nicht im Index finden möchte.
Nun hat mein Kollege Michael (ein SharePoint Guru) mir geholfen auf Basis des Blog Eintrages ein Powershell Script zu erstellen das sozusagen täglich neu und automatisiert die Sitemap einer SharePoint Website erstellt. Das Script muss mit der Endung PS1 gespeichert werden und kann über den Zeitplandienst von Windows regelmäßig gestartet werden
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
function New-SPSiteMap
{
param($SavePath="C:\inetpub\wwwroot\wss\VirtualDirectories\minerva1.ppedv.de80\SiteMap.xml",
$Url="http://minerva.ppedv.de")
$site = Get-SPSite $url
$list = $site.AllWebs | ForEach-Object -Process { $_.Lists } |
ForEach-Object -Process {$_.Items} |
ForEach-Object -Process { $_.Web.Url.Replace(" ","%20") + "/" + $_.url.Replace(" ","%20")}
#excludes directories you don’t want in sitemap. you can put multiple lines here:
$list= $list | ? {$_ -notmatch "_catalogs"}
$list= $list | ? {$_ -notmatch "Cache%20Profiles"}
$list= $list | ? {$_ -notmatch "Reports%20List"}
$list= $list | ? {$_ -notmatch "Reporting%20Templates"}
$list= $list | ? {$_ -notmatch "Reporting%20Metadata"}
$list= $list | ? {$_ -notmatch "Long%20Running%20Operation%20Status"}
$list= $list | ? {$_ -notmatch "Relationships%20List"}
$list= $list | ? {$_ -notmatch "ReusableContent"}
$list= $list | ? {$_ -notmatch "Style%20Library"}
$list= $list | ? {$_ -notmatch "PublishingImages"}
$list= $list | ? {$_ -notmatch "SiteCollectionDocuments"}
$list= $list | ? {$_ -notmatch "Lists/"}
$list= $list | ? {$_ -notmatch "Documents/"}
$list= $list | ? {$_ -notmatch "PublishedLinks"}
$list= $list | ? {$_ -notmatch "WorkflowHistory"}
$list= $list | ? {$_ -notmatch "WorkflowTasks"}
}
function New-Xml
{
param($RootTag="urlset",$ItemTag="url", $ChildItems="*", $SavePath="Pfad\SiteMap.xml")
Begin {
$xml="<?xml version=""1.0"" encoding=""UTF-8""?>
<urlset xmlns=""http://www.sitemaps.org/schemas/sitemap/0.9"">"
}
Process {
$xml += " <$ItemTag>"
foreach ($child in $_){
$Name = $child
$xml += " <$ChildItems>$child</$ChildItems>"
}
$xml += " </$ItemTag>"
}
End {
$xml += "</$RootTag>"
$xmltext=[xml]$xml
$xmltext.Save($SavePath)
}
}
New-SPSiteMap