<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>ASP.NET Dexign</title>
    <description>Making Profitable Websites With ASP.NET</description>
    <link>http://www.seoasp.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.0.0</generator>
<language>en-GB</language><blogChannel:blogRoll>http://www.seoasp.net/opml.axd</blogChannel:blogRoll><blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink><dc:creator>Joel Carlson</dc:creator><dc:title>ASP.NET Dexign</dc:title><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Dexign" /><feedburner:info uri="dexign" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Nice Sale On SEO PowerSuite</title><description>&lt;table border="0" width="500"&gt;	&lt;tbody&gt;		&lt;tr valign="top"&gt;			&lt;td width="150" style="padding-top: 20px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px"&gt;&lt;img src="http://www.link-assistant.com/images/heart.png" alt="Big Heart SEO Cruise" width="150" height="116" /&gt;&lt;/td&gt;			&lt;td&gt;			&lt;h3&gt;&lt;font color="#CF0A0D"&gt;SEO PowerSuite launches Big Heart WWW Cruise&lt;/font&gt;&lt;/h3&gt;			&lt;p&gt;			Big Heart is travelling from webpage to webpage and lets anyone get a 60% discount on state-of-the art &lt;a href="http://www.link-assistant.com"&gt;SEO software&lt;/a&gt;.			&lt;/p&gt;			&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td colspan="2"&gt;			&lt;p&gt;			This is the best chance to get the world-standard SEO software at a special Christmas price &amp;mdash; and help your business enter a prosperous New Year.			&lt;/p&gt;			&lt;p&gt;			&lt;strong&gt;Check the rules, join the cruise and &lt;a href="http://www.link-assistant.com/news/seo-big-heart.html"&gt;claim your Christmas offer&lt;/a&gt;!&lt;/strong&gt;			&lt;/p&gt;			&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/9x3R8Y6l0v4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/9x3R8Y6l0v4/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2010/12/22/Nice-Sale-On-SEO-PowerSuite.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=30cd8d29-460e-40be-bedc-c3a8dd1338fd</guid><pubDate>Wed, 22 Dec 2010 15:37:00 -1000</pubDate><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=30cd8d29-460e-40be-bedc-c3a8dd1338fd</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=30cd8d29-460e-40be-bedc-c3a8dd1338fd</trackback:ping><wfw:comment>http://www.seoasp.net/post/2010/12/22/Nice-Sale-On-SEO-PowerSuite.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=30cd8d29-460e-40be-bedc-c3a8dd1338fd</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=30cd8d29-460e-40be-bedc-c3a8dd1338fd</feedburner:origLink></item><item><title>PLINQO - What LINQ to SQL Was Supposed To Be</title><description>&lt;p&gt;Lately I&amp;#39;ve been spending some time trying to optimize the amount of time it takes to develop web applications. &amp;nbsp;I&amp;#39;ve realized that it just takes way too much time to do tasks that are common for pretty much every project I work on. &amp;nbsp;Number one on the list has got to be creating a good data layer for an app. &amp;nbsp;My last big project used LINQ to SQL on the backend and I was very happy with how that turned out. &amp;nbsp;The only big complaint I had was that my changes would always get overwritten whenever I refreshed the DBML. &amp;nbsp;I also had some smaller issues with the lack of support for many-to-many relationships. &amp;nbsp;&lt;/p&gt;&lt;p&gt;Well here we are, almost a year and a half after&amp;nbsp;&lt;a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx"&gt;Microsoft acknowledged that they were done with LINQ to SQL&lt;/a&gt;&amp;nbsp;in favor of Entity Framework and I am still not seeing anything tangible that EF provides to me over LINQ to SQL. &amp;nbsp;I can see what it brings to enterprise developers with big clunky apps supported by many developers, but I need something lightweight that just works, and that&amp;#39;s what LINQ to SQL is for me. &amp;nbsp;Now just imagine what L2S could be if MS had invested that time in updating the LINQ to SQL tools and language.&lt;/p&gt;&lt;p&gt;Well my friends, I&amp;#39;m happy to say that we don&amp;#39;t have to imagine, because we have&amp;nbsp;&lt;a href="http://www.plinqo.com"&gt;PLINQO&lt;/a&gt;! &amp;nbsp;PLINQO is an amazing set of templates for the&amp;nbsp;&lt;a href="http://www.codesmithtools.com"&gt;CodeSmith&lt;/a&gt;&amp;nbsp;code generation tool. &amp;nbsp; PLINQO examines your existing database and not only auto-generates an excellent strongly typed LINQ to SQL-based data layer in seconds, but actually enhances LINQ to SQL with some amazing extension methods. &amp;nbsp;Here&amp;#39;s just a partial list of what I love about PLINQO: &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; -&amp;nbsp;Automatic support for many-to-many relationship (very cool!)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Auto-generates extension methods for filtering by keys and indexes, including non-equality operators!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Caching extension methods for dead simple caching of queries&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Generates a nice business layer with a very slick business rules engine&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Future queries feature for batching multiple queries to a single database call&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - Want to change or enhance the generated code? &amp;nbsp;Just edit the templates to your heart&amp;#39;s content!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; - And I saved the best for last:&amp;nbsp;your DBML changes are NOT overwritten when you regenerate!&amp;nbsp;&lt;/p&gt;&lt;p&gt;I have to say, I&amp;#39;m amazed at what can be done with CodeSmith. &amp;nbsp;I&amp;#39;m going to have to spend some time looking into what else I can generate with this great tool. &amp;nbsp;I should have a lot more time to do that now that I&amp;#39;ve found PLINQO :-) . &amp;nbsp;&lt;/p&gt;&lt;p&gt;I was extremely disappointed when I heard that Microsoft was basically abandoning LINQ to SQL. &amp;nbsp;I felt forced to move on to other solutions like nHibernate. &amp;nbsp;Now I see that LINQ to SQL is alive and being supported and improved upon as well or possibly better than Microsoft itself would&amp;#39;ve done. &amp;nbsp;Thank you&amp;nbsp;&lt;a href="http://www.plinqo.com"&gt;PLINQO&lt;/a&gt;! &amp;nbsp;&lt;/p&gt;&lt;p&gt;P.S. &amp;nbsp;If you are a fan of LINQ to SQL or even just a fan of working smarter not harder, then you at least owe it to yourself to commit 4 minutes and 8 seconds to watch the intro video on&amp;nbsp;&lt;a href="http://www.plinqo.com"&gt;PLINQO.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/4UNpsA8ba7g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/4UNpsA8ba7g/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2010/03/11/PLINQO-what-LINQ-to-SQL-was-supposed-to-be.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=8c6345fc-fa49-460e-a29b-0753df0b9d08</guid><pubDate>Thu, 11 Mar 2010 14:00:00 -1000</pubDate><category>ASP.NET</category><category>Tools</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=8c6345fc-fa49-460e-a29b-0753df0b9d08</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=8c6345fc-fa49-460e-a29b-0753df0b9d08</trackback:ping><wfw:comment>http://www.seoasp.net/post/2010/03/11/PLINQO-what-LINQ-to-SQL-was-supposed-to-be.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=8c6345fc-fa49-460e-a29b-0753df0b9d08</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=8c6345fc-fa49-460e-a29b-0753df0b9d08</feedburner:origLink></item><item><title>Using Dynamic Data Controls In Your Existing Project</title><description>&lt;p&gt;
Just about every site I&amp;#39;ve ever created has needed some screens to manage the data in certain tables - whether it&amp;#39;s users, products, or in my most recent case forums.&amp;nbsp; I always overlook the time it takes to make a basic CRUD (CReate-Update-Delete) screen.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
There really is a lot of work that goes into these types of screens: Get the data, hook the data up to a grid, format the grid and the fields in the grid, create a details view, format the details view and the detail fields, hook the details view up to the grid, enable editing of the fields, validate the inputs on save, save or insert the data, refresh the grid after saving, and on and on it goes.&amp;nbsp; PHEW!&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&amp;quot;Uh, excuse me Mr. Project Manager, how long did I estimate for this task again?&amp;quot; :-)&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;Dynamic Data To The Rescue 
&lt;/h2&gt;
&lt;p&gt;
After installing Visual Studio 2008 SP1, you may have noticed a new web application project called Dynamic Data Web Application.&amp;nbsp; A Dynamic Data web application provides a framework for quickly and easily creating CRUD screens for any tables in your database.
&lt;/p&gt;
&lt;p&gt;
However, an entire web application dedicated to managing the data in a database is not very practical.&amp;nbsp; In a typical software project, whatever CRUD screens you need are usually just a small piece of the entire application.
&lt;/p&gt;
&lt;p&gt;
The good news is that Dynamic Data is fairly easily integrated &lt;em&gt;&lt;strong&gt;into your existing projects &lt;/strong&gt;&lt;/em&gt;as well.&amp;nbsp; Props to &lt;a href="http://www.hanselman.com/blog/PlugInHybridsASPNETWebFormsAndASPMVCAndASPNETDynamicDataSideBySide.aspx"&gt;Scott Hanselman for explaining clearly how to do this&lt;/a&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So here&amp;#39;s a summary of exactly how I went about adding screens for managing the Forums table in my existing application:
&lt;/p&gt;
&lt;h2&gt;
Step 1: Add Dynamic Data To Your Project
&lt;/h2&gt;
&lt;p&gt;
There are a few specific things you&amp;#39;ll need to do to add Dynamic Data to your Web Forms or MVC project:
&lt;/p&gt;
&lt;h4&gt;
I. Add a reference to System.Web.DynamicData&amp;nbsp;
&lt;/h4&gt;
&lt;h4&gt;
II. Add dynamic data controls to the &amp;lt;controls&amp;gt; element of your web.config
&lt;/h4&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;pages&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;controls&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add tagPrefix=&amp;quot;asp&amp;quot; namespace=&amp;quot;System.Web.DynamicData&amp;quot; 
assembly=&amp;quot;System.Web.DynamicData, Version=3.5.0.0, 
Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot;/&amp;gt;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/controls&amp;gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;h4&gt;
III.&amp;nbsp; Register your model in Global.asax
&lt;/h4&gt;
&lt;pre class="c-sharp"&gt;
protected void Application_Start()
{
&amp;nbsp;&amp;nbsp; MetaModel model = new MetaModel();&amp;nbsp;
&amp;nbsp;&amp;nbsp; model.RegisterContext(typeof(SocialDataContext), 
new ContextConfiguration() { ScaffoldAllTables = false });
&amp;nbsp;&amp;nbsp; RegisterRoutes(RouteTable.Routes);
}
&lt;/pre&gt;
&lt;h4&gt;
IV.&amp;nbsp; Add the DynamicData folder and contents to your project
&lt;/h4&gt;
&lt;p&gt;
As suggested by Scott H., the best way to do this is to go create a brand new Dynamic Data Web Application project off in another directory.&amp;nbsp; Be sure to name the new project the exact same name as your current project so namespaces will all match up.&amp;nbsp; Once created, copy the DynamicData folder and all it&amp;#39;s contents over to your project directory and include the entire thing in your project.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img src="http://www.seoasp.net/image.axd?picture=DynamicDataFolder.gif" border="1" alt="" /&gt;
&lt;/p&gt;
&lt;h2&gt;
Step 2: Create A Web Form and add a DynamicDataManager
&lt;/h2&gt;
&lt;p&gt;
Pretty simple, create your web form and and add the DynamicDataManager control to it:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;asp:DynamicDataManager ID=&amp;quot;DynamicDataManager1&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;  
&lt;/pre&gt;
&lt;h2&gt;
Step 3: Add A GridView
&lt;/h2&gt;
&lt;p&gt;
Next step is to add a grid that will contain the table data.  The only really interesting part here is the columns of the gridview - they are controls of type DynamicControl.  These smart controls look at the type of data they are given and automatically determine the best way to display it:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;!-- The Data --&amp;gt;
&amp;lt;asp:LinqDataSource ID=&amp;quot;DataSourceItems&amp;quot; runat=&amp;quot;server&amp;quot; 
ContextTypeName=&amp;quot;Social.Models.SocialDataContext&amp;quot; EnableDelete=&amp;quot;True&amp;quot; 
EnableInsert=&amp;quot;True&amp;quot; EnableUpdate=&amp;quot;True&amp;quot; TableName=&amp;quot;Forums&amp;quot; 
OrderBy=&amp;quot;DisplayOrder, ForumName&amp;quot;&amp;gt;
&amp;lt;/asp:LinqDataSource&amp;gt;
&amp;lt;!-- The Grid --&amp;gt;
&amp;lt;asp:GridView ID=&amp;quot;gvItems&amp;quot; runat=&amp;quot;server&amp;quot; AllowPaging=&amp;quot;True&amp;quot; AllowSorting=&amp;quot;True&amp;quot; 
AutoGenerateColumns=&amp;quot;False&amp;quot; DataSourceID=&amp;quot;DataSourceItems&amp;quot; 
onselectedindexchanged=&amp;quot;gvItems_SelectedIndexChanged&amp;quot;&amp;gt;
&amp;lt;Columns&amp;gt;
&amp;lt;asp:CommandField ShowSelectButton=&amp;quot;True&amp;quot; HeaderStyle-Width=&amp;quot;60&amp;quot; /&amp;gt;
&amp;lt;asp:TemplateField HeaderText=&amp;quot;Forum&amp;quot; SortExpression=&amp;quot;ForumName&amp;quot;&amp;gt;
&amp;lt;ItemTemplate&amp;gt;
&amp;lt;asp:DynamicControl ID=&amp;quot;DynamicControl1&amp;quot; runat=&amp;quot;server&amp;quot; DataField=&amp;quot;ForumName&amp;quot; /&amp;gt;
&amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:TemplateField&amp;gt;
&amp;lt;asp:TemplateField HeaderText=&amp;quot;Category&amp;quot; SortExpression=&amp;quot;ForumCategory.ForumCategory1&amp;quot;&amp;gt;
&amp;lt;ItemTemplate&amp;gt;
&amp;lt;asp:DynamicControl ID=&amp;quot;DynamicControl2&amp;quot; runat=&amp;quot;server&amp;quot; DataField=&amp;quot;ForumCategory&amp;quot; /&amp;gt;
&amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:TemplateField&amp;gt;
&amp;lt;asp:TemplateField HeaderText=&amp;quot;Sort&amp;quot; SortExpression=&amp;quot;DisplayOrder&amp;quot;&amp;gt;
&amp;lt;ItemTemplate&amp;gt;
&amp;lt;asp:DynamicControl ID=&amp;quot;DynamicControl3&amp;quot; runat=&amp;quot;server&amp;quot; DataField=&amp;quot;DisplayOrder&amp;quot; /&amp;gt;
&amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/asp:TemplateField&amp;gt;
&amp;lt;/Columns&amp;gt;
&amp;lt;/asp:GridView&amp;gt;
&amp;lt;!-- An &amp;#39;Add New&amp;#39; Button --&amp;gt;
&amp;lt;div class=&amp;quot;addrow&amp;quot;&amp;gt;
&amp;lt;asp:LinkButton ID=&amp;quot;btnInsert&amp;quot; runat=&amp;quot;server&amp;quot; onclick=&amp;quot;btnInsert_Click&amp;quot;&amp;gt;Add New
&amp;lt;/asp:LinkButton&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;
Step 4: Add The Details View
&lt;/h2&gt;
&lt;p&gt;
Next up we&amp;#39;ll add the details view where the user will be able to update any editable properties of the selected item or add a new item.&amp;nbsp; Again the interesting part (and the part you&amp;#39;ll change when you make your own page) are the DetailsView columns. 
&lt;/p&gt;
&lt;p&gt;
The DynamicField controls peek at the datatype of the field they are bound to and provide the appropriate input control for that datatype.&amp;nbsp; Not only that, but validation is built in as well!&amp;nbsp; Pretty neat, eh? 
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;!-- Details --&amp;gt;
&amp;lt;asp:Panel ID=&amp;quot;PanelDetails&amp;quot; runat=&amp;quot;server&amp;quot; Visible=&amp;quot;false&amp;quot;&amp;gt;
&amp;lt;!-- Input Fields --&amp;gt;
&amp;lt;asp:DetailsView ID=&amp;quot;dvItem&amp;quot; runat=&amp;quot;server&amp;quot; 
AutoGenerateRows=&amp;quot;False&amp;quot; DataKeyNames=&amp;quot;ForumID&amp;quot; DataSourceID=&amp;quot;DataSourceDetails&amp;quot; 
AutoGenerateDeleteButton=&amp;quot;True&amp;quot; AutoGenerateEditButton=&amp;quot;True&amp;quot; 
AutoGenerateInsertButton=&amp;quot;True&amp;quot; onitemdeleted=&amp;quot;dvItem_ItemDeleted&amp;quot; 
onitemupdated=&amp;quot;dvItem_ItemUpdated&amp;quot; oniteminserted=&amp;quot;dvItem_ItemInserted&amp;quot;&amp;gt; 
&amp;lt;Fields&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;ForumID&amp;quot; HeaderStyle-Width=&amp;quot;150&amp;quot; HeaderText=&amp;quot;Forum ID:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;ForumName&amp;quot; HeaderText=&amp;quot;Forum Name:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;ForumDesc&amp;quot; HeaderText=&amp;quot;Description:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;DisplayOrder&amp;quot; HeaderText=&amp;quot;Sort:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;ForumCategory&amp;quot; HeaderText=&amp;quot;Category:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;IsPrivate&amp;quot; HeaderText=&amp;quot;Private:&amp;quot; /&amp;gt;
&amp;lt;asp:DynamicField DataField=&amp;quot;ParentForum&amp;quot; HeaderText=&amp;quot;Parent:&amp;quot; /&amp;gt;
&amp;lt;/Fields&amp;gt;
&amp;lt;/asp:DetailsView&amp;gt;
&amp;lt;!-- Details DataSource --&amp;gt;
&amp;lt;asp:LinqDataSource ID=&amp;quot;DataSourceDetails&amp;quot; runat=&amp;quot;server&amp;quot; 
ContextTypeName=&amp;quot;Social.Models.SocialDataContext&amp;quot; EnableDelete=&amp;quot;True&amp;quot; 
EnableInsert=&amp;quot;True&amp;quot; EnableUpdate=&amp;quot;True&amp;quot; TableName=&amp;quot;Forums&amp;quot; 
Where=&amp;quot;ForumID == @ForumID&amp;quot;&amp;gt;
&amp;lt;WhereParameters&amp;gt;
&amp;lt;asp:ControlParameter ControlID=&amp;quot;gvItems&amp;quot; DefaultValue=&amp;quot;-1&amp;quot; Name=&amp;quot;ForumID&amp;quot; 
PropertyName=&amp;quot;SelectedValue&amp;quot; Type=&amp;quot;Int32&amp;quot; /&amp;gt;
&amp;lt;/WhereParameters&amp;gt;
&amp;lt;/asp:LinqDataSource&amp;gt;
&amp;lt;/asp:Panel&amp;gt; 
&lt;/pre&gt;
&lt;p&gt;
In software development, it often is all the little things that take up the most time.&amp;nbsp; The old saying &amp;#39;the last 20% is 80% of the work&amp;#39; certainly is true in my experience.&amp;nbsp; Dynamic Data is a huge timesaver in that regard, it handles all the little details of a common but typically painstaking task. 
&lt;/p&gt;
&lt;h2&gt;
Step 5: Handle A Few Events
&lt;/h2&gt;
&lt;p&gt;
Finally, in the code behind, we&amp;#39;ll handle a few of the events to make the flow of work a little smoother.&amp;nbsp; Notice how little code is required to make this fully featured CRUD screen:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DynamicDataManager1.RegisterControl(gvItems);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DynamicDataManager1.RegisterControl(dvItem);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void gvItems_SelectedIndexChanged(object sender, EventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PanelDetails.Visible = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void btnInsert_Click(object sender, EventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dvItem.ChangeMode(DetailsViewMode.Insert);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PanelDetails.Visible = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void dvItem_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RefreshGrid();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void dvItem_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RefreshGrid();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void dvItem_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RefreshGrid();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; private void RefreshGrid()
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gvItems.DataBind();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gvItems.SelectedIndex = -1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;h2&gt;
So How Do I Use This?
&lt;/h2&gt;
&lt;p&gt;
For anyone wanting to use this, here&amp;#39;s what you need to change to suit your situation:
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&amp;nbsp;Edit the grid&amp;#39;s datasource to pull data from your table in your DataContext 
	&lt;/li&gt;
	&lt;li&gt;&amp;nbsp;Update the grid&amp;#39;s columns - most importantly the DataField properties - to match the fieldnames (or in this case LINQ properties) from your table
	&lt;/li&gt;
	&lt;li&gt;&amp;nbsp;Update the details datasource pull the specific record from your table based on the key field from grid
	&lt;/li&gt;
	&lt;li&gt;&amp;nbsp;Update the details view to include all the columns that cannot be null or that you want to be editable by the user
	&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
That&amp;#39;s it!&amp;nbsp; Pretty much everything else is handeled through the magic of Dynamic Data! 
&lt;/p&gt;
&lt;div class="IME"&gt;
A Dynamic Data app also comes with a lot of scaffolding for mapping URLs to tables and dynamically generating entire CRUD pages.&amp;nbsp; The purpose of this post was simply to show how to use the Dynamic Data controls in your existing projects with minimal changes to how the rest of your project does things. Hope it was helpful!&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/X_D6FB8awPs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/X_D6FB8awPs/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/10/07/Using-Dynamic-Data-Controls-In-Your-Existing-Project.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=381b3ae4-7f42-40da-bb72-11314441f25a</guid><pubDate>Tue, 07 Oct 2008 11:45:00 -1000</pubDate><category>ASP.NET</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=381b3ae4-7f42-40da-bb72-11314441f25a</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=381b3ae4-7f42-40da-bb72-11314441f25a</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/10/07/Using-Dynamic-Data-Controls-In-Your-Existing-Project.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=381b3ae4-7f42-40da-bb72-11314441f25a</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=381b3ae4-7f42-40da-bb72-11314441f25a</feedburner:origLink></item><item><title>URL Rewriting Extension For BlogEngine</title><description>&lt;p&gt;
In my latest project I decided to incorporate BlogEngine.Net for managing the content.&amp;nbsp; While it certainly does have &lt;a href="http://www.objectreference.net/post/BlogEngine-Flaws.aspx"&gt;some things I don&amp;#39;t like&lt;/a&gt;, all in all it&amp;#39;s an excellent basic content system.&amp;nbsp; I love the control over the HTML that you get with the theme system, the flexibility provided by extensions and widgets, and the integration with &lt;a href="http://windowslivewriter.spaces.live.com/"&gt;Windows Live Writer&lt;/a&gt; - truly a job well done by &lt;a rel="acquaintance" href="http://blog.madskristensen.dk/"&gt;Mads&lt;/a&gt; and the BE.NET team!
&lt;/p&gt;
&lt;h2&gt;
During A Redesign, Think About Search Visitors
&lt;/h2&gt;
&lt;p&gt;
So I have an existing site  that is already ranking well in the search engines.&amp;nbsp; When I move the content to BlogEngine, the paths to most of those inner pages is going to change.&amp;nbsp; If I don&amp;#39;t redirect the URLs, visitors will be clicking on my search listings only to get &amp;#39;Oops! Page Not Found&amp;#39; errors.&amp;nbsp; Because there are too many pages to redirect one-by-one, I quickly realize I&amp;#39;m going to need a consistent pattern for rewriting these URLs.
&lt;/p&gt;
&lt;p&gt;
Currently the inner page article URLs are in the form: 
&lt;/p&gt;
&lt;p&gt;
&lt;strong style="color: #0066b3"&gt;
http://www.domain.com&lt;u&gt;/blog/post/&lt;em&gt;keyword-rich-name&lt;/em&gt;.aspx&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I plan to use BlogEngine&amp;#39;s &amp;#39;page&amp;#39; system for these articles, so I plan for the new URLs to be of the form: 
&lt;/p&gt;
&lt;p&gt;
&lt;strong style="color: #0066b3"&gt;
http://www.domain.com&lt;u&gt;/page/&lt;em&gt;keyword-rich-name&lt;/em&gt;.aspx&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;h2&gt;
During A Redesign, Think About Search Engines
&lt;/h2&gt;
&lt;p&gt;
There&amp;#39;s one more thing I need to consider here.&amp;nbsp; These articles have been around a while and other sites have linked to them.&amp;nbsp; I&amp;#39;m going to want to keep the &amp;#39;link juice&amp;#39; that those articles have gained over the years.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
To do that, we need to use what&amp;#39;s known as a 301 redirect.&amp;nbsp; &amp;#39;301&amp;#39; is the HTTP code for &amp;#39;Moved Permanently&amp;#39;.&amp;nbsp; It tells the search engines that this new URL actually IS the new location of that old page.&amp;nbsp; By doing this, the search engines will (eventually) consider the two URLs one in the same, and count any links to the old URL the same as links to the new URL.
&lt;/p&gt;
&lt;div class="IME"&gt;
In my experience, the time it takes for this transition to take place varies and there may even be a period of time when both pages are actually ranking despite the fact that they both end up at the same new URL! 
&lt;/div&gt;
&lt;h2&gt;
&lt;/h2&gt;
&lt;h2&gt;
Enter The BlogEngine Regex Rewriter
&lt;/h2&gt;
&lt;p&gt;
The Regex Rewriter is a BlogEngine extension that allows you to
control the rewriting or redirecting of URLs. It is based on regular
expressions, but in it&amp;#39;s simplest form, you don&amp;#39;t need any knowledge of regular
expressions at all to use it.
&lt;/p&gt;
&lt;h3&gt;
Installation
&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Step 1) &lt;/strong&gt;Copy the two code files into your App_Code/Extensions folder.&amp;nbsp; In my case I chose to put them in a subfolder:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;
&lt;img src="http://www.seoasp.net/image.axd?picture=files.png" border="1" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 2) &lt;/strong&gt;Register the HTTPModule by adding the following line to the &amp;lt;httpModules&amp;gt; section of your web.config:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;add name=&amp;quot;RegexRewriter&amp;quot; type=&amp;quot;Dexign.Web.HttpModules.RegexRewriterModule&amp;quot;/&amp;gt;
&lt;/pre&gt;
&lt;div class="IME"&gt;
You should make sure the RegexRewriter module is listed *before* BlogEngine&amp;#39;s own UrlRewrite module.
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;strong&gt;Step 3) &lt;/strong&gt;Configure your rewrites by logging in to your control panel and clicking on the Extensions tab and then Edit for Regex Rewriter:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;
&lt;img src="http://www.seoasp.net/image.axd?picture=settings.png" border="1" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
There is one section for managing the rewrites and a separate section for managing the redirects. 
&lt;/p&gt;
&lt;h2&gt;Basic Usage - Rewrites vs. Redirects&lt;/h2&gt;
&lt;p&gt;
A &amp;#39;rewrite&amp;#39; is when the server internally serves a different URL than the user specified.&lt;br /&gt;
For example, let&amp;#39;s pretend you setup the following &lt;strong&gt;rewrite&lt;/strong&gt; with the Regex Rewriter extension: 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;img src="http://www.seoasp.net/image.axd?picture=samplerewrite.png" border="1" alt="" /&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Now if you navigate to /rewriteme.aspx you will see the content from the BlogEngine default page while the URL remains unchanged (/rewriteme.aspx).&lt;br /&gt;
&lt;br /&gt;
On the other hand, if you setup the following &lt;strong&gt;redirect&lt;/strong&gt;: 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp; &lt;img src="http://www.seoasp.net/image.axd?picture=sampleredirect.png" border="1" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
When you navigate to /redirectme.aspx the page (URL and all) will actually change to &amp;#39;/default.aspx&amp;#39;.&amp;nbsp; Internally, rewrites are processed first and will take priority over redirects. 
&lt;/p&gt;
&lt;h2&gt;Getting Tricky - Using Regular Expressions
&lt;/h2&gt;
&lt;p&gt;
If you don&amp;#39;t want to manually rewrite/redirect every single URL, you can setup regular expression patterns.&amp;nbsp; For example, to 301 redirect all of my old existing URLs to the new URLs for my new project, I&amp;#39;m using the following redirect setting:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;
&lt;img src="http://www.seoasp.net/image.axd?picture=sampleredirect2.png" border="1" alt="" /&gt;
&lt;/p&gt;
&lt;h2&gt;OK, But What Is This Good For?
&lt;/h2&gt;
&lt;p&gt;
Here are some things you could use this extension for:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;- &lt;u&gt;Moving an existing site to BlogEngine&lt;/u&gt; - Redirect those old URLs so your pages keep all of their search engine authority.
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;- &lt;u&gt;Creating short URLs&lt;/u&gt; - You can rewrite to any URL - internal or external. So for example, you could setup &amp;#39;/a.aspx&amp;#39; to redirect to some very long URL that is difficult to remember (similar to what snipurl does).
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;- &lt;u&gt;Hiding affiliate codes&lt;/u&gt; -&amp;nbsp; Rewrite to external sites to hide the use of affiliate codes - for example, rewrite an internal link to an external site with your affiliate code.&amp;nbsp; This is a popular technique among affiliate marketers. 
&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;
I&amp;#39;m sure there are other uses for this that I haven&amp;#39;t thought of.&amp;nbsp; If you do use it, I&amp;#39;d love it if you left a comment below!
&lt;/p&gt;
&lt;h2&gt;Download The Extension &lt;/h2&gt;
&lt;p&gt;
&lt;a rel="enclosure" href="http://www.seoasp.net/file.axd?file=RegexRewriter.zip"&gt;RegexRewriter.zip (2.46 kb)&lt;/a&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/rL_yY8MWRGE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/rL_yY8MWRGE/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/08/05/URL-Rewriting-Extension-For-BlogEngine.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=38ffa42b-6028-4475-ae2b-f39a82aabd3c</guid><pubDate>Tue, 05 Aug 2008 15:07:00 -1000</pubDate><category>ASP.NET</category><category>BlogEngine.NET</category><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=38ffa42b-6028-4475-ae2b-f39a82aabd3c</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=38ffa42b-6028-4475-ae2b-f39a82aabd3c</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/08/05/URL-Rewriting-Extension-For-BlogEngine.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=38ffa42b-6028-4475-ae2b-f39a82aabd3c</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=38ffa42b-6028-4475-ae2b-f39a82aabd3c</feedburner:origLink></item><item><title>Your Search Rankings Just Dropped One Position</title><description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="float: left; margin-bottom: 4px; margin-right: 8px"&gt;
&lt;a href="http://www.seoasp.net/image.axd?picture=WindowsLiveWriter/YourSearchRankingsJustDroppedOnePosition_C22A/image_4.png"&gt;&lt;img style="border-width: 0px" src="http://www.seoasp.net/image.axd?picture=WindowsLiveWriter/YourSearchRankingsJustDroppedOnePosition_C22A/image_thumb_1.png" border="0" alt="image" title="image" width="169" height="28" /&gt;&lt;/a&gt;
&lt;/div&gt;
Just a quick note - &lt;a href="http://googleblog.blogspot.com/2008/07/knol-is-open-to-everyone.html"&gt;yesterday Google (somewhat) quietly announced&lt;/a&gt; that &lt;a href="http://knol.google.com/"&gt;Google Knol&lt;/a&gt; is now accepting contributions from anyone with a Google login.&amp;nbsp; Basically it&amp;rsquo;s a Google Wikipedia that allows contributors to earn a portion of the profits from ads displayed on each page.&amp;nbsp; They claim that it is more focused on how-to and informational articles than Wikipedia, which is more about information on generic words, phrases, movies, video games, gadgets, etc. but I&amp;rsquo;m sure that Knol will cover those things too.   
&lt;p&gt;
&amp;nbsp;It&amp;rsquo;s a smart idea from Google&amp;rsquo;s perspective.&amp;nbsp; Wikipedia has a whopping &lt;a href="https://siteexplorer.search.yahoo.com/search?p=http%3A%2F%2Fwikipedia.org&amp;amp;bwm=p&amp;amp;bwms=p&amp;amp;fr=sfp&amp;amp;fr2=seo-rd-se" target="_blank"&gt;400 million pages indexed in Yahoo&lt;/a&gt; (&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=site%3Awikipedia.org&amp;amp;btnG=Google+Search" target="_blank"&gt;~12M in Google&lt;/a&gt;) right now.&amp;nbsp; That&amp;rsquo;s all from free contributors &amp;ndash; so you can imagine how much content Knol is going to fill up with.&amp;nbsp; 
&lt;/p&gt;
&lt;h2&gt;The Wikipedia Factor&lt;/h2&gt;  
&lt;p&gt;
Not to mention the fact that Google can make &lt;em&gt;&lt;strong&gt;sure &lt;/strong&gt;&lt;/em&gt;that Knol gets enough traffic to greatly benefit contributors.&amp;nbsp; In fact I could see the Knol topic appearing as one of those special inserts right at the top, much the way you might see a Google Map result when searching for local businesses.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
It&amp;rsquo;s always annoyed me how Google has, in my opinion, unfairly ranked Wikipedia so highly.&amp;nbsp; When doing keyword research, seeing Wikipedia in the top two rankings can be a kiss of death &amp;ndash; it&amp;rsquo;s nearly *impossible* to push that page out no matter how authoritative your site becomes. 
&lt;/p&gt;
&lt;p&gt;
That&amp;rsquo;s the reason for my (somewhat overstated :-) title for this post.&amp;nbsp; If you thought Wikipedia has a lot of unusually high search rankings, I can only imagine how much &amp;#39;Google juice&amp;#39; Knol will be collecting.&amp;nbsp; To be quite honest, from the quality of content that is on Knol now, much of it probably does deserve to rank very highly for the topics covered.&amp;nbsp; 
&lt;/p&gt;
&lt;h2&gt;
On the Bright Side, I Could Be Wrong!&lt;/h2&gt;
&lt;p&gt;
From the short amount of testing I&amp;#39;ve done, I haven&amp;#39;t seen articles from Knol rank unusually high yet, which is a good sign.&amp;nbsp; I also wonder if the existence of ads will cause bloggers and webmasters to hesitate to link freely to it.&amp;nbsp; The fact that Wikipedia has always been ad-free, I believe, is one of the main reasons it&amp;#39;s gained so much authority in the search engines. 
&lt;/p&gt;
&lt;h2&gt;But What To Do About It?&lt;/h2&gt;  
&lt;p&gt;
So Knol is almost certainly going to be huge.&amp;nbsp; Google definitely has the power to make it huge if it so chooses.&amp;nbsp; It&amp;rsquo;s going to cover every topic under the sun, and most importantly those articles are almost certainly going to appear high in the search engines (one way or another).&amp;nbsp; So here&amp;rsquo;s a tip:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;For webmasters:&lt;/strong&gt; Whatever niches you are in, start claiming your space by creating Google Knol articles on those topics before someone else beats you to it.&amp;nbsp; If you can sneak in a reference to your site in the process, that would be even better!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;For anyone:&lt;/strong&gt; Take a look at Google Knol, maybe even do some keyword research to find what kinds of how-to topics people are searching for and write a few good articles.&amp;nbsp; Odds are you will start seeing some passive revenue for your efforts!   
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/Qr5kL5OQbOI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/Qr5kL5OQbOI/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/24/Your-Search-Rankings-Just-Dropped-One-Position.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=987ee766-ce39-439b-afb2-38e203a24773</guid><pubDate>Thu, 24 Jul 2008 05:48:00 -1000</pubDate><category>Making Money</category><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=987ee766-ce39-439b-afb2-38e203a24773</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=987ee766-ce39-439b-afb2-38e203a24773</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/24/Your-Search-Rankings-Just-Dropped-One-Position.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=987ee766-ce39-439b-afb2-38e203a24773</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=987ee766-ce39-439b-afb2-38e203a24773</feedburner:origLink></item><item><title>Google Analytics For SEO Tip #1 - Keyword Research</title><description>&lt;p&gt;
Google Analytics is a great free tool for monitoring your web traffic.&amp;nbsp; Most every webmaster would probably agree that it&amp;#39;s important to have some kind of statistical tracking on your website, but few that I know actually *use* the data for anything useful.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So here are a couple ideas to get you thinking how Google Analytics can help you improve your site&amp;#39;s search rankings:
&lt;/p&gt;
&lt;h2&gt;
The Keyword Research Problem
&lt;/h2&gt;
&lt;p&gt;
A big problem for many SEOs is getting accurate and reliable keyword search counts.&amp;nbsp; If you don&amp;#39;t have accurate search counts, you may very well find yourself working hard to rank for keywords that no one is searching for!
&lt;/p&gt;
&lt;p&gt;
Tools like Wordtracker are pretty good, but my experience with their data is that it is not the most accurate.&amp;nbsp; Just one of many examples: 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp; 
&lt;img src="http://www.seoasp.net/image.axd?picture=rrd.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Now am I &lt;em&gt;&lt;strong&gt;really&lt;/strong&gt;&lt;/em&gt; supposed to believe that more people are searching for &amp;#39;&lt;strong&gt;bratz games to play&lt;/strong&gt;&amp;#39; than &amp;#39;&lt;strong&gt;games&lt;/strong&gt;&amp;#39;?&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Google has also recently expanded it&amp;#39;s AdWords keyword tool to include approximate search volumes. However, my initial look at it makes me believe that even that tool is not as accurate as &lt;em&gt;something that comes directly from the search engine should be&lt;/em&gt;.
&lt;/p&gt;
&lt;h2&gt;Using Google Analytics For Keyword Research&lt;/h2&gt;
&lt;p&gt;
Google Analytics can be a great source for keyword research because it will show you actual search volumes that your site is getting for a keyword.&amp;nbsp; Of course, this is all relative to your ranking, but if you consider the actual number of visits from a keyword &lt;em&gt;&lt;strong&gt;in relation to&lt;/strong&gt;&lt;/em&gt; your ranking for that keyword, you can find many high traffic niche keywords that you may be able to quickly increase your traffic with.&amp;nbsp; The best part is that you can tell the &lt;em&gt;&lt;strong&gt;quality&lt;/strong&gt;&lt;/em&gt; of the traffic from a specific keyword before you put any effort into optimizing for it.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;
Step 1: Go To The Keywords Report -&lt;/strong&gt; Log into your &lt;a href="https://www.google.com/analytics/home/?et=reset&amp;amp;hl=" target="_blank"&gt;Google Analytics&lt;/a&gt; account and go to the Keywords report (under the Traffic Sources heading in the main menu).&amp;nbsp; By default, you will be looking at all the keywords that searchers used to find your site over the last 30 days. &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 2: Find QUALITY Keywords -&lt;/strong&gt; As you look at the list, pay attention to the Pages/Visit, Time on Site and Bounce Rate.&amp;nbsp; These stats are invaluable indicators of what a specific keyword is worth to you.&amp;nbsp; Different keywords bring in different kinds of visitors - you want the kind that find your site, become interested in the content and stick around a while.
&lt;/p&gt;
&lt;div class="IME"&gt;
NOTE: If you have less than 10 total visits for a keyword, your stats could be easily skewed by a single click-happy visitor.&amp;nbsp; Expand your date range to analyze more visits from that keyword in order to determine it&amp;#39;s real value. 
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;
&lt;br /&gt;
Step 3: Check Rankings -&lt;/strong&gt; Once you have a nice list of keywords that bring in &lt;u&gt;quality&lt;/u&gt; traffic, you&amp;#39;ll want to check your rankings for those keywords.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Notice we haven&amp;#39;t talked about the visits statistic at all yet.&amp;nbsp; That&amp;#39;s because the actual number of visits received is not important - what really matters is the &lt;strong&gt;number of visits relative to your ranking&lt;/strong&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
To illustrate my point, have a look at the results of a &lt;a href="http://www.cs.cornell.edu/People/tj/publications/granka_etal_04a.pdf" target="_blank"&gt;Cornell University study&lt;/a&gt; on how test subjects behaved across 397 different Google searches:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img src="http://www.seoasp.net/image.axd?picture=click-distribution-serp.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
The #1 result gets a huge percentage of the overall clicks, while the 10th result gets just a fraction.&amp;nbsp; You can imagine how small of a percentage a listing on page two or three will get.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
That&amp;#39;s why this technique is useful - pretty much any keyword that is bringing you measurable traffic with a ranking outside of the top 5 is probably worth optimizing for in some way. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 4: Optimize Your Pages&lt;/strong&gt; - Now that you&amp;#39;ve got a keyword that looks like it may be worth targeting, start simple.&amp;nbsp; Make sure the exact keyword phrase is in the title, meta description and sprinkle it throughout the content.&amp;nbsp; Also don&amp;#39;t be afraid to link out to good known resources on the topic, even using the keyword as the anchor text. &amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
There is no rocket science involved in what we&amp;#39;re doing here, we&amp;#39;re simply trying to make some fast and simple on-page tweaks to see if we can easily move up the ladder a bit.&amp;nbsp; Monitor your rankings for any keywords you do this with and just&amp;nbsp; see how things change.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Every niche is a little different - you may find that it&amp;#39;s much easier or more difficult than you thought to rank well for the keyword.&amp;nbsp; You never know, maybe there is more competition than you first thought, or perhaps your overall site is just not &amp;#39;themed&amp;#39; for that keyword enough to compete with the top 10 results.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The idea is to try this with many keywords quickly so you can find the gems and then focus more on optimizing for those.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;
By the way, can you guess how I came up with the topic for this post? ;-)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/ZAlFsM-8eqQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/ZAlFsM-8eqQ/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/23/Google-Analytics-For-SEO.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=6a978d9e-11db-4fa2-afa0-b22e266b9d90</guid><pubDate>Wed, 23 Jul 2008 04:14:00 -1000</pubDate><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=6a978d9e-11db-4fa2-afa0-b22e266b9d90</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=6a978d9e-11db-4fa2-afa0-b22e266b9d90</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/23/Google-Analytics-For-SEO.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=6a978d9e-11db-4fa2-afa0-b22e266b9d90</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=6a978d9e-11db-4fa2-afa0-b22e266b9d90</feedburner:origLink></item><item><title>Railing on .NET</title><description>&lt;p&gt;
To get myself in the habit of posting more, I&amp;#39;m going to try to do a little Friday humor every week.&amp;nbsp; Today we have some hilarious stuff from the Ruby on Rails community.&amp;nbsp; Credit goes to &lt;a rel="acquaintance" href="http://www.twitter.com/alexrudloff" target="_blank"&gt;Alex Rudloff&lt;/a&gt; for the original link that got me off on this tangent.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Commercial #1: Ruby on Rails vs. .NET&lt;/strong&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="425" height="349"&gt;
	&lt;param name="width" value="425" /&gt;
	&lt;param name="height" value="349" /&gt;
	&lt;param name="allowfullscreen" value="true" /&gt;
	&lt;param name="src" value="http://www.youtube.com/v/z99EHyG2jQA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1" /&gt;
	&lt;embed type="application/x-shockwave-flash" width="425" height="349" allowfullscreen="true" src="http://www.youtube.com/v/z99EHyG2jQA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;br /&gt;
&lt;br /&gt;
And here&amp;#39;s the other one, joking about the costs of .NET development: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Commercial #2: Ruby on Rails vs. .NET &lt;/strong&gt;&lt;br /&gt;
&lt;div&gt;
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="425" height="349"&gt;
	&lt;param name="width" value="425" /&gt;
	&lt;param name="height" value="349" /&gt;
	&lt;param name="allowfullscreen" value="true" /&gt;
	&lt;param name="src" value="http://www.youtube.com/v/528BCJiRkks&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1" /&gt;
	&lt;embed type="application/x-shockwave-flash" width="425" height="349" allowfullscreen="true" src="http://www.youtube.com/v/528BCJiRkks&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Ironically the last tidbit I have for you is a little rap about not being able to afford certain Ruby dev tools.  If you&amp;#39;re a computer nerd you will be laughing your head off.  Check it:
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.railsenvy.com/2008/7/17/we-aint-got-no-rspec" target="_blank"&gt;We ain&amp;#39;t got no RSpec&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Hope you keep laughing all day.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/zboBF_pXvy4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/zboBF_pXvy4/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/17/Railing-on-NET.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=64156adf-ae03-4d5d-9c51-53593913876b</guid><pubDate>Thu, 17 Jul 2008 10:10:00 -1000</pubDate><category>Funny Stuff</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=64156adf-ae03-4d5d-9c51-53593913876b</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=64156adf-ae03-4d5d-9c51-53593913876b</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/17/Railing-on-NET.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=64156adf-ae03-4d5d-9c51-53593913876b</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=64156adf-ae03-4d5d-9c51-53593913876b</feedburner:origLink></item><item><title>Using jQuery To Call ASP.NET Page Methods and Web Services</title><description>&lt;p&gt;
I&amp;#39;m a HUGE fan of jQuery.&amp;nbsp; In fact in my latest project, I&amp;#39;ve removed the ScriptManager from my ASP.NET pages entirely.&amp;nbsp; Originally I was including both jQuery and the ScriptManager on my pages because I just couldn&amp;#39;t live without the ease and simplicity of calling page methods with ASP.NET AJAX.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Well, with a little help from &lt;a href="http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/" target="_blank"&gt;Dave Ward&lt;/a&gt; and &lt;a href="http://www.west-wind.com/weblog/posts/324917.aspx" target="_blank"&gt;Rick Strahl&lt;/a&gt;, I realized that calling ASP.NET page methods (and web services) from jQuery is really pretty simple.  I haven&amp;#39;t seen any one place where the exact code to do this is presented, so here is the code that I use to call page methods with jQuery:&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Define your web methods in your code behind:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
[WebMethod()]
public static int TestNoParams()
{
return 1;
}
[WebMethod()]
public static string TestWithParams(string a, int b)
{
return a + b.ToString();
}
&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Step 2:&lt;/strong&gt; Include the jQuery library: 
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;        src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&amp;quot;&amp;gt;
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
I also use the following (optional) helper function to call page methods: 
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
function PageMethod(fn, paramArray, successFn, errorFn)
{
&amp;nbsp; var pagePath = window.location.pathname;
&amp;nbsp; //Create list of parameters in the form:
//{&amp;quot;paramName1&amp;quot;:&amp;quot;paramValue1&amp;quot;,&amp;quot;paramName2&amp;quot;:&amp;quot;paramValue2&amp;quot;}
&amp;nbsp; var paramList = &amp;#39;&amp;#39;;
&amp;nbsp; if (paramArray.length &amp;gt; 0)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i=0; i&amp;lt;paramArray.length; i+=2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;  &amp;nbsp; if (paramList.length &amp;gt; 0) paramList += &amp;#39;,&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;   paramList += &amp;#39;&amp;quot;&amp;#39; + paramArray[i] + &amp;#39;&amp;quot;:&amp;quot;&amp;#39; + paramArray[i+1] + &amp;#39;&amp;quot;&amp;#39;;
&amp;nbsp;   }
&amp;nbsp; }
&amp;nbsp; paramList = &amp;#39;{&amp;#39; + paramList + &amp;#39;}&amp;#39;;
&amp;nbsp; //Call the page method
&amp;nbsp; $.ajax({
&amp;nbsp;&amp;nbsp;  &amp;nbsp; type: &amp;quot;POST&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;   url: pagePath + &amp;quot;/&amp;quot; + fn,
&amp;nbsp;&amp;nbsp;  &amp;nbsp; contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
&amp;nbsp;&amp;nbsp;  &amp;nbsp; data: paramList,
&amp;nbsp;&amp;nbsp;&amp;nbsp;   dataType: &amp;quot;json&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;   success: successFn,
&amp;nbsp;&amp;nbsp;  &amp;nbsp; error: errorFn
&amp;nbsp; })
;}
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;div class="IME"&gt;
*NOTE: It&amp;#39;s possible to simplify this even more, but I prefer this because it closely emulates the way ASP.NET AJAX page methods are called.
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;&lt;br /&gt;
Step 3:&lt;/strong&gt; Now in your Javascript code, you can easily call page methods like so:
&lt;/p&gt;
&lt;pre class="javascript"&gt;
PageMethod(&amp;quot;TestNoParams&amp;quot;, [], AjaxSucceeded, AjaxFailed); //No parameters
PageMethod(&amp;quot;TestWithParams&amp;quot;, [&amp;quot;a&amp;quot;, &amp;quot;value&amp;quot;, &amp;quot;b&amp;quot;, 2], AjaxSucceeded, AjaxFailed); //With parameters
&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;
Step 4:&lt;/strong&gt; Handle the result
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
function AjaxSucceeded (result)
{ 
alert(result.d);
}
&lt;/pre&gt;
&lt;div class="IME"&gt;
Note that the parameter names (&amp;quot;a&amp;quot; and &amp;quot;b&amp;quot; in the above example) must match the variable names on your WebMethod exactly.  Also notice in the success function that the actual data is in the &amp;#39;d&amp;#39; property of the result.
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
That&amp;#39;s it!&amp;nbsp; You can use the same kind of code to call ASP.NET web services, you just need to change the pagePath variable to the path of the .asmx file.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Happy jQuerying!&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
EDIT: I&amp;#39;ve updated it to show how to handle the result 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/MXhB0RCtjaY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/MXhB0RCtjaY/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/16/jQuery-To-Call-ASPNET-Page-Methods-and-Web-Services.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=416babb3-2d60-40b4-9036-73c32794bf86</guid><pubDate>Wed, 16 Jul 2008 01:28:00 -1000</pubDate><category>ASP.NET</category><category>Javascript</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=416babb3-2d60-40b4-9036-73c32794bf86</pingback:target><slash:comments>20</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=416babb3-2d60-40b4-9036-73c32794bf86</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/16/jQuery-To-Call-ASPNET-Page-Methods-and-Web-Services.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=416babb3-2d60-40b4-9036-73c32794bf86</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=416babb3-2d60-40b4-9036-73c32794bf86</feedburner:origLink></item><item><title>Programmers Are The Best (Internet) Marketers</title><description>&lt;p&gt;
&lt;img src="http://www.seoasp.net/image.axd?picture=willprogramforfood.jpg" border="2" alt="Starving Programmer" title="Starving Programmer" hspace="12" vspace="12" align="left" /&gt;John Reese, a very established Internet marketer, just released &lt;a href="http://www.trafficsecrets.com/home/v3.html" target="_blank"&gt;part 3 of his Traffic Secrets 2.0 pre-release videos&lt;/a&gt;.&amp;nbsp; The purpose of these videos is to build hype for his new traffic building e-course.&amp;nbsp; Personally, I rarely spend money on those kinds of Internet marketing products, but that&amp;#39;s not the point of my post.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.trafficsecrets.com/" target="_blank"&gt;All&lt;/a&gt; &lt;a href="http://www.trafficsecrets.com/ts2vid2ynpy5h0w.html" target="_blank"&gt;three&lt;/a&gt; &lt;a href="http://www.trafficsecrets.com/v3.html" target="_blank"&gt;videos&lt;/a&gt; are light on specifics, but they do explain some of the general tactics that his course is based on.&amp;nbsp; If your current marketing techniques are starting to not work as well as they used to, take a look at these videos as I think they do a nice job of summarizing what I believe are the most current techniques that are still working to promote sites and improve search rankings.

&lt;/p&gt;
&lt;h2&gt;Unique And Useful Content Is King&lt;/h2&gt;
&lt;p&gt;
Without a doubt, unique and useful content is the very best way to drive traffic to a site.&amp;nbsp; Now when most people hear that, they think about coming up with something funny or informative to blog about.&amp;nbsp; However, from my experience, the very best content that truly drives traffic virally are tools and widgets that perform unique and useful functions.&amp;nbsp; This is what the Traffic Secrets Video #3 is about.
&lt;/p&gt;
&lt;p&gt;
I gotta say, as I hang around some of the &lt;a href="http://forums.digitalpoint.com/" target="_blank"&gt;popular&lt;/a&gt; &lt;a href="http://www.webmasterworld.com/" target="_blank"&gt;webmaster&lt;/a&gt; &lt;a href="http://www.seochat.com/" target="_blank"&gt;forums&lt;/a&gt;, I&amp;#39;m always amazed at how few webmasters actually know how to code!&amp;nbsp; To me, that&amp;#39;s like being a car salesman in a foreign country where you barely know the language. 
&lt;/p&gt;
&lt;p&gt;
Of course, good quality written content will always get noticed, I don&amp;#39;t think that will ever change.&amp;nbsp; But it&amp;#39;s just so easy to start blogging these days that it&amp;#39;s sometimes hard to be heard above such a large (and growing) crowd.
&lt;/p&gt;
&lt;h2&gt;OK, I Lied A Little&lt;/h2&gt;
&lt;p&gt;
Alright so no, right now programmers are generally *not* the best Internet marketers, but I think that&amp;#39;s quickly changing.&amp;nbsp; As overall content on the web continues to improve, the so-called SEO experts that charge for sprinkling keywords into their clients pages and &amp;#39;building links&amp;#39; by linking to their clients from directories and link exchanges will finally become obsolete.&amp;nbsp; Replaced by creative folks that know how to code, know how to create value and know how to virally spread the word about what they&amp;#39;ve made.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
I really think the future is very bright for those programmers that are able to find a niche and then use their creativity and coding skills to quickly fill that niche with a free online tool, Facebook widget, Wordpress plugin, etc. etc.&amp;nbsp;&amp;nbsp; More and more, they will be the ones that are really driving the viral traffic, getting the links and making the money. 
&lt;/p&gt;
&lt;p&gt;
...at least I hope so... ooooor maybe Google will come out with a &lt;a href="http://code.google.com/apis/opensocial/" target="_blank"&gt;tool that makes web programming so easy&lt;/a&gt; that anyone can do it and we&amp;#39;ll all end up like the guy in the picture. ;)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/QLEkJJUf0dw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/QLEkJJUf0dw/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/13/Programmers-Are-The-Best-(Internet)-Marketers.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=9a44aff8-0447-4fda-9390-7b0e68a51c86</guid><pubDate>Sun, 13 Jul 2008 11:58:00 -1000</pubDate><category>Making Money</category><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=9a44aff8-0447-4fda-9390-7b0e68a51c86</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=9a44aff8-0447-4fda-9390-7b0e68a51c86</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/13/Programmers-Are-The-Best-(Internet)-Marketers.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=9a44aff8-0447-4fda-9390-7b0e68a51c86</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=9a44aff8-0447-4fda-9390-7b0e68a51c86</feedburner:origLink></item><item><title>Five Common ASP.NET SEO Mistakes</title><description>&lt;p&gt;
&lt;img src="http://www.seoasp.net/image.axd?picture=searchengine.jpg" border="2" alt="Search Engine Robot" title="Search Engine Robot" hspace="12" align="left" /&gt;So you&amp;#39;ve finally finished your next masterpiece of a website.&amp;nbsp; Everything is tested and working great.&amp;nbsp; The user interface is immaculate and the design is truly something to behold.&amp;nbsp; Time to push it live and start &lt;a href="http://youtube.com/watch?v=ybfhSHp2lhY" target="_blank"&gt;rolling in the money&lt;/a&gt;, right?&amp;nbsp; Well, there is one more user demographic that you still need to satisfy - the search engines!&amp;nbsp; Unless, of course, you don&amp;#39;t *need* any of that free targeted search traffic??&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
One of the strengths of ASP.NET development with Visual Studio is the relative ease in which you can create a functional dynamic site.&amp;nbsp; At the same time, one of it&amp;#39;s weaknesses is the relative ease in which you can create a functional dynamic site that is confusing, if not completely unusable, by a search engine robot.
&lt;/p&gt;
&lt;p&gt;
Here&amp;#39;s a checklist of five common mistakes that ASP.NET and the Viewstate/Postback model of development make it far too easy for unsuspecting developers to make:
&lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;1. Overuse of Button Controls&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;
The Button and LinkButton controls are handy for running server-side logic when a link or push button is clicked, but keep in mind that &lt;strong&gt;search engines can&amp;#39;t follow these links&lt;/strong&gt;. These controls cause a postback via Javascript code that search engines are unable to execute.&amp;nbsp; I&amp;#39;ve seen more than one developer who&amp;#39;s standard method of linking from one page to another was to drag a LinkButton control onto the page and then place a Response.Redirect in the event handler, making the entire site completely uncrawlable by search engines. 
&lt;/p&gt;
&lt;div class="IME"&gt;
It seems obvious, but when linking between pages try to use a plain text link or Hyperlink control whenever possible.
&lt;/div&gt;
&lt;h2&gt;&lt;strong&gt;2. Duplicate Page Titles&lt;/strong&gt; &lt;/h2&gt;
&lt;p&gt;
With any dynamically generated site, it can be difficult to generate unique page titles for each and every page, but it really is important.&amp;nbsp; If you have a quality site, then the search engines are working hard to drive traffic to your site.&amp;nbsp; After all, that is their core business - to provide links to the best resources on whatever the searcher is looking for.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So you need to make it easy for the search engines to figure out exactly what your pages are about, and the page title is an important part of that.&amp;nbsp; Not only that, but once the search engine &lt;em&gt;does&lt;/em&gt; rank your page highly, the title is the primary text that searchers will be seeing and using to determine whether to click on your listing or not!&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;div class="IME"&gt;
On dynamically generated pages, try to to use a keyword-rich page title, such as the full name of the product on a product page, for best results.&amp;nbsp; If you don&amp;#39;t have any appropriate field, provide the ability for the user to specify their own page titles for each item being displayed.&amp;nbsp; It&amp;#39;s worth their time and effort. 
&lt;/div&gt;
&lt;h2&gt;&lt;strong&gt;3. Duplicate Meta Descriptions &lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;
Much like the duplicate page title issue, the meta description tag should not be duplicated across your pages either.&amp;nbsp; Like the page title, this text is used (although to a lesser extent) by the search engines to determine the content of your page and also appears underneath your title in the search engine listing.&amp;nbsp; Depending on the number of pages of dynamic content on your site, it might not be practical to add multi-sentence descriptions for every single page.&amp;nbsp; In this case, simply remove the meta description tag altogether.&amp;nbsp; The major search engines are pretty good at improvising when the description tag is missing by displaying portions of the page body that match the user&amp;#39;s search keywords instead. 
&lt;/p&gt;
&lt;div class="IME"&gt;
In my experience, the SEO benefit of adding a keyword-rich meta description is not enough to warrant spending a great deal of time creating custom descriptions for sites with 100+ pages. 
&lt;/div&gt;
&lt;h2&gt;&lt;strong&gt;4. State-Dependent Pages&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;
Search engines rely heavily on the idea that every unique page has it&amp;#39;s own unique URL.&amp;nbsp; That means that if you are basing a page&amp;#39;s content on session variables or viewstate parameters, you are probably going to have problems getting that content indexed.&amp;nbsp; Once a search engine finds a URL, Google will continue spidering that page, but you can bet that the search engine robot will not navigate through your site again to get there.&amp;nbsp; So you need to make sure that any content you want indexed by search engines can be accessed by simply opening your browser and typing in the URL of that content.&amp;nbsp; That means unique URLs for every product in your ecommerce store, ever category in your directory, etc.&amp;nbsp; 
&lt;/p&gt;
&lt;div class="IME"&gt;
My recommendation is to use viewstate rarely and session variables almost never.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;strong&gt;5. Duplicate Content When Rewriting URLs With ASP.NET &lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;
When you rewrite a URL, the browser is displaying a keyword-rich URL, but internally the URL of the page being displayed is still the ugly URL with the querystring parameters.&amp;nbsp; In technical terms, the Request.RawURL value might be something like:
&lt;/p&gt;
&lt;pre class="c-sharp"&gt;
http://www.store.com/products/coffee-cup.aspx
&lt;/pre&gt;
but the Request.Url value would still be something like:
&lt;pre class="c-sharp"&gt;
http://www.store.com/products.aspx?productID=15
&lt;/pre&gt;
&lt;p&gt;
All of that is just fine, but a problem can arise if you have a Button or LinkButton control that posts back on that page.&amp;nbsp; &lt;strong&gt;&lt;em&gt;By default, the button control will post back to the Request.URL value&lt;/em&gt;&lt;/strong&gt;. causing the URL to change after postback.&amp;nbsp; This can be a problem if some users end up linking to your &amp;#39;ugly&amp;#39; URLs, because the search engines will find that link and spider it.&amp;nbsp; To the search engine the two different URLs signify two different pages and both will be indexed seperately, causing a pretty ugly duplicate content problem. &amp;nbsp;
&lt;/p&gt;
&lt;div class="IME"&gt;
Thankfully, starting with .NET 2.0, there is a &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl(VS.80).aspx" target="_blank"&gt;PostBackUrl&lt;/a&gt; property on the button controls.&amp;nbsp; Set this property to the Request.RawUrl value and your button will postback to the &amp;#39;pretty&amp;#39; URL. 
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;em&gt;
What do you do in your daily ASP.NET development to ensure your sites are search engine friendly?&amp;nbsp; Post a comment about it, I&amp;#39;d love to hear it. :-)&lt;/em&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol&gt;
	&lt;br /&gt;
	&lt;br /&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/Dexign/~4/XyEwPmDtwf8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Dexign/~3/XyEwPmDtwf8/post.aspx</link><author>joel.nospam@nospam.fun3dgames.com (bigcarlito)</author><comments>http://www.seoasp.net/post/2008/07/08/Five-ASPNET-SEO-Mistakes.aspx#comment</comments><guid isPermaLink="false">http://www.seoasp.net/post.aspx?id=091d792d-0889-4514-ad97-850a5d1ea9ab</guid><pubDate>Tue, 08 Jul 2008 12:20:00 -1000</pubDate><category>ASP.NET</category><category>SEO</category><dc:publisher>bigcarlito</dc:publisher><pingback:server>http://www.seoasp.net/pingback.axd</pingback:server><pingback:target>http://www.seoasp.net/post.aspx?id=091d792d-0889-4514-ad97-850a5d1ea9ab</pingback:target><slash:comments>6</slash:comments><trackback:ping>http://www.seoasp.net/trackback.axd?id=091d792d-0889-4514-ad97-850a5d1ea9ab</trackback:ping><wfw:comment>http://www.seoasp.net/post/2008/07/08/Five-ASPNET-SEO-Mistakes.aspx#comment</wfw:comment><wfw:commentRss>http://www.seoasp.net/syndication.axd?post=091d792d-0889-4514-ad97-850a5d1ea9ab</wfw:commentRss><feedburner:origLink>http://www.seoasp.net/post.aspx?id=091d792d-0889-4514-ad97-850a5d1ea9ab</feedburner:origLink></item></channel>
</rss>

