<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>jhawk's WebLog : Sitemap</title><link>http://blogs.msdn.com/jhawk/archive/tags/Sitemap/default.aspx</link><description>Tags: Sitemap</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Search enabling Silverlight and AJAX web applications</title><link>http://blogs.msdn.com/jhawk/archive/2007/05/23/searching-enabling-silverlight-and-ajax-web-applications.aspx</link><pubDate>Wed, 23 May 2007 22:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2821411</guid><dc:creator>jhawk</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/jhawk/comments/2821411.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jhawk/commentrss.aspx?PostID=2821411</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;The major search engines index HTML text elements (body text, title, image alt text, etc) and following anchor tag (&amp;lt;a href= /&amp;gt;) links. Currently none of the search engines index XAML. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;However many Silverlight web applications have dynamic experiences that are driven by code running in the browser. In Silverlight 1.0 this is Javascript and in Silverlight 1.1 this will include manage code languages such as C#, VB, etc. The code may be as simple as generating dynamic UI fragments on the fly all the way from a static list of data to dynamically obtaining data from a database/web service and generate UI fragments and adding them to the UI experience. Thus even when search engines get around to indexing static .xaml content which is good first step it will still be a partial solution as most of the content will be dynamic.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;I gave a talk (with &lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Nathan Buggia from Live Search) &lt;/SPAN&gt;at MIX07 about search enabling dynamic content including Silverlight content. You can download the deck, view the video from my &lt;A href="http://blogs.msdn.com/jhawk/archive/2007/05/06/mix07-search-capabilities-for-dynamic-web-content.aspx" mce_href="http://blogs.msdn.com/jhawk/archive/2007/05/06/mix07-search-capabilities-for-dynamic-web-content.aspx"&gt;blog posting&lt;/A&gt;. The Silverlight content is about half way into the video. Download the end to end Northwind sample&amp;nbsp;&lt;A class="" href="http://mixer1021.mixsandbox.com/Northwind.zip" mce_href="http://mixer1021.mixsandbox.com/Northwind.zip"&gt;here&lt;/A&gt;&amp;nbsp;that has the ProductSL.aspx which is Silverlight enabled&amp;nbsp;. The sample also has a product data search provider against SQL Server, dynamic data sitemaps, navigation data links control. Below are the relevant highlights from the talk:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Sitemaps&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;The major search engines supports &lt;A href="http://sitemaps.org/" mce_href="http://sitemaps.org/"&gt;sitemaps&lt;/A&gt; which are great way to give hints to the search engine as to which pages (URLs) are important in the site, the priority of the page relative to the other page in the site, change frequency (daily, weekly, etc) and when the page was last modified. This is a good way to point search engines at the right set of pages in the web site. The &lt;A href="http://asp.net/downloads/futures/default.aspx?tabid=62" mce_href="http://asp.net/downloads/futures/default.aspx?tabid=62"&gt;ASP.NET Futures CTP&lt;/A&gt; has features to enable you to have multiple code driven dynamic sitemaps. This can be used for ASP.NET, AJAX and Silverlight web applications. There is a &lt;A href="http://quickstarts.asp.net/Futures/services/doc/searchsitemaps.aspx" mce_href="http://quickstarts.asp.net/Futures/services/doc/searchsitemaps.aspx"&gt;quickstart tutorial&lt;/A&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&amp;nbsp;“ALT text for dynamic content”&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Search engines can’t index static XAML (not yet) and they can’t index dynamically generated XAML. &amp;nbsp;If we look at how image tags are handled by search engines, the search engines may index the image name in the src attribute however they don’t index the actual JPEG/GIF image, they do however also index the alt=”sometext” attribute. The point being they index the textual attributes for the image tag.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;So for dynamic pages you could have dynamic Silverlight/AJAX content in a &amp;lt;div id=”dynamic_content” &amp;gt; and static text and navigation links hints (below) in &amp;lt;div id=”flat_content” &amp;gt;. The flat_content div can be thought of as the “ALT text” for the dynamic content. For data/service driven web applications you can add a small number of HTML text hints. You can do this very easily using .aspx controls and a small amount of LINQ/ADO.NET code. For static information you could even place the data directly inline as HTML in the flat_content div and data bind to that by parsing the HTML . &lt;EM&gt;Update: Nikhil has a &lt;/EM&gt;&lt;A class="" href="http://www.nikhilk.net/AjaxSEO.aspx" mce_href="http://www.nikhilk.net/AjaxSEO.aspx"&gt;&lt;EM&gt;great post&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; wrt inlining data in HTML to help with SEO&lt;/EM&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;You need to ensure that the web application returns the same page to a search engine that would be returned to a regular browser. The search engines frown upon returning different pages to them and may even ban (blacklist) the web site if different content is returned. Below is a optimization (just one option) to remove the unneeded flat HTML in the flat_content div if the browser has javascript enabled … and thus staying true to the tenet of returning the same content to browsers and search engines.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Lucida Console'"&gt;script&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt; &lt;SPAN style="COLOR: red"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="text/javascript"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById(&lt;SPAN style="COLOR: #a31515"&gt;"flat_content"&lt;/SPAN&gt;).setAttribute(&lt;SPAN style="COLOR: #a31515"&gt;"innerHTML"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Lucida Console'"&gt;script&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 7pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Navigation Hyperlinks and Query Strings&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Many Silverlight/AJAX web applications have one (or a small number pages) page that directly update the UI experience in the browser without page-to-page navigation thus there are no navigation anchor tags (URLs) for the search engines to follow. You can give the search engines help by providing anchor tags that point back to the page with navigation information in the query string. When the page loads just parse the query string in the page load and display the request UI. In Silverlight 1.1 you can access the query string using the managed code HtmlPage.QueryString api. These navigation anchor tag and query string hints will help the search engine follow all the links in the site and so obtain the relevant text keywords for its index. When the user searches in the search engine for a keyword, the Silverlight/AJAX will have a keyword match and included in the search results. When the user clicks on the search result they will be presented with the full Silverlight enabled experience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: dark2"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: dark2; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Enjoy&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'"&gt;Jonathan&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2821411" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jhawk/archive/tags/MIX07/default.aspx">MIX07</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/Search/default.aspx">Search</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/Sitemap/default.aspx">Sitemap</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>Search Capabilities for Dynamic ASP.NET Web Content</title><link>http://blogs.msdn.com/jhawk/archive/2007/05/06/mix07-search-capabilities-for-dynamic-web-content.aspx</link><pubDate>Sun, 06 May 2007 21:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2450116</guid><dc:creator>jhawk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jhawk/comments/2450116.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jhawk/commentrss.aspx?PostID=2450116</wfw:commentRss><description>&lt;P&gt;Last week at&amp;nbsp;MIX07 Nathan Buggia and I presented a talk on Search enabling dynamic web content applications including ASP.NET and&amp;nbsp;Silverlight&amp;nbsp;web applications. Download the &lt;A class="" title=deck href="http://mixer1021.mixsandbox.com/BD007_Hawkins.zip" mce_href="http://mixer1021.mixsandbox.com/BD007_Hawkins.zip"&gt;deck&lt;/A&gt;&amp;nbsp;and &lt;A class="" title=stream href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=BD007%20-%20Search%20Capabilities%20for%20Dynamic%20Web%20Content&amp;amp;speakers=Jonathan%20Hawkins&amp;amp;source=videos/BD007.wmv" mce_href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=BD007%20-%20Search%20Capabilities%20for%20Dynamic%20Web%20Content&amp;amp;speakers=Jonathan%20Hawkins&amp;amp;source=videos/BD007.wmv"&gt;stream&lt;/A&gt;&amp;nbsp;or &lt;A class="" title=download href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/videos/BD007.wmv" mce_href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/videos/BD007.wmv"&gt;download&lt;/A&gt; the video. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Updated&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The &lt;A class="" title=BasicSearch.zip href="http://mixer1021.mixsandbox.com/BasicSearch.zip" mce_href="http://mixer1021.mixsandbox.com/BasicSearch.zip"&gt;BasicSearch.zip&lt;/A&gt; sample demonstrates how to use the SearchDataSource, search providers and turn your ASP.NET navigation into a search site map that can be consumed by the major search engine. Download the &lt;A class="" href="http://www.asp.net/downloads/futures/default.aspx?tabid=62" mce_href="http://www.asp.net/downloads/futures/default.aspx?tabid=62"&gt;ASP.NET Futures CTP&lt;/A&gt; and copy the Microsoft.Web.Preview.dll into the bin directory.&lt;/P&gt;
&lt;P&gt;You can find QuickStarts on &lt;A class="" href="http://quickstarts.asp.net/Futures/services/default.aspx" mce_href="http://quickstarts.asp.net/Futures/services/default.aspx"&gt;Search and Search Site Maps&lt;/A&gt; to learn more. It will also show how to write your own search provider. I have included sample code search providers for Index Server and Yahoo! search. &lt;/P&gt;
&lt;P&gt;enjoy&lt;BR&gt;Jonathan&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2450116" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jhawk/archive/tags/MIX07/default.aspx">MIX07</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/Search/default.aspx">Search</category><category domain="http://blogs.msdn.com/jhawk/archive/tags/Sitemap/default.aspx">Sitemap</category></item></channel></rss>