Posts tagged SEO

Closing down seokeywordsearch.com

I’ve decided to shut down my experimental SEO keyword graphing tool to focus on other activities. Sorry if you came here looking for it but it is no more. I wish I could suggest a good alternative to you but AFAIK there still isn’t a tool that can take a keyword, expand it and then produce a graph showing you all the related terms and how you should think about planning your web site pages.

If anyone wants to buy the domain seokeywordsearch.com let me know before I let it go as it will probably get snapped up by some domain squatter.

If you want to build you own I suggest you look into some of the force-directed layout algorithms out there including D3, a javascript library.

SEO Keyword Diagram

Continuous Link and SEO Testing – Announcing LinkCheck2

First there was Continuous Integration, then there was Continuous Deployment, now there’s Continuous Testing.

Testing can (and should) be integrated throughout your web site development process: automated unit-testing on developer’s machines, automated unit testing during the continuous integration builds and then further automated testing after your continuous deployment process has deployed the site to a server.

Sadly, once deployed, most sites get only a cursory test through a service like Monastic that pings one or more URLs on your site to check that the site is still alive.

BUT, how do you know if your site is still working from a user’s perspective or from an SEO perspective? Serious bugs can creep in from seemingly small changes that aren’t in code but are in the markup to a site, these are often not tested by any of the aforementioned tests. For example, a designer editing HTML markup for your site could accidentally break the sign up link off the main entry page, or the page you had carefully crafted to be SEO optimized around a specific set of keywords could accidentally lose one of those words and thus loses rank in search engines causing your traffic to go down. Would you even know if this has happened?

Based on a small test I ran on some local startup web sites, the answer appears to be ‘no’. These sites often had broken links and poorly crafted titles (from an SEO perspective). Of course they could have used any of the many SEO services that can check your site to see if it has broken links or poorly crafted titles and descriptions (e.g. seomoz.com), but that’s often a manual process and there’s no way to link such tests into your existing continuous integration process.

What would be nice would be if you could include a ‘Continuous Link and SEO test’ on your Continuous Integration Server. This test could be triggered after each deployment and it could also run as a scheduled task, say every hour, to check that your web site is up and that all public pages are behaving correctly from a links and SEO perspective. It would also be nice if there was some way to get a quick report after each deployment confirming what actually changed on the site: pages added, pages removed, links added, links removed.

This is what my latest utility ‘LinkCheck2′ does. It’s a Window command line application that produces a report, and it will set an error code if it finds anything amiss. You can run it from the command line for a one off report or call it from your continuous integration server. The error code can be used by most CI servers to send you an alert. If you are using the changes feature you’ll get an alert when something changes and then on the next run it will automatically clear.

Continuous Testing with LinkCheck2

LinkCheck2 also includes the ability to define a ‘link contract’ on your site. This is a meta tag you add to a page to say ‘this page must link to these other pages’. LinkCheck2 will verify that this contract has been met and that none of your critical site links have been dropped by accident when someone was editing the markup.

At the moment LinkCheck2 checks all links and performs a small number of SEO tests (mostly around the length of titles). If there is interest in this tool I may expand the SEO capabilities, please send me your feedback and requests.

Use of LinkChecker.exe is subject to a license agreement: in a nutshell: commercial use is permitted, redistribution is not. Please contact me for details.

NEW VERSION AVAILABLE, CLICK HERE

Thinking about how Search Engine Marketing (SEM) can be applied to other areas of business

One thing that struck me while I was building the Seo Keyword Search and Mapping tool was that keyword analysis really can reveal a lot about what people are thinking about and what they are looking for. Seo keyword analysis really is the largest scale unprompted recall survey you can possibly do. You can apply it to almost any industry and it gives you a detailed picture as to what customers of that industry really want.

Of course, prior to the launch of the Seo Keyword Search and Mapping tool it was pretty hard to actually see that picture but now it’s quite easy.

So what can you use this new found understanding of your customers to do?

Well, obviously you can create AdWord campaigns around it – that’s why Google provides the information to you in the first place. And clearly you can craft better landing pages with more keyword friendly titles, headings, body content and images on the page. But why stop there? Here’s four more things you can do with the information:

1. Plan your next blog post using it – make sure you’ve covered all the topics people are asking about for your industry

2. Create a digital sign using the keywords that are most interesting to people who visit your retail locations

3. Use them in Twitter campaigns

4. Use them to craft better direct marketing messages whether email or postal

SEO Keyword Search and Mapping Tool now available

Today marks the release of my SEO Keyword Mapping tool at http://seokeywordsearch.com.

This released version lets you create a keyword map for any combination of up to three search phrases.

SEO Myths

There’s a post over on Search Engine Land that has a good list of SEO Myths and things to avoid: http://searchengineland.com/36-seo-myths-that-wont-die-but-need-to-40076

There are however two points with which I take issue:

“14. It’s important for your rankings that you update your home page frequently (e.g. daily.) This is another fallacy spread by the same aforementioned fellow panelist. Plenty of stale home pages rank just fine, thank you very much.”

Yes there are stale pages that rank highly but that doesn’t mean updating your site regularly isn’t going to boost your search engine rankings; the stale pages may be at the top of their category for other reasons.  If you aren’t #1 on the keywords you care about then I highly recommend adding fresh, relevant content to your site on a regular basis.  I’ve observed competing sites leap up from 2 to 10 spaces in the rankings when they updated their site and then gradually drop back over the following days or weeks.  Google does care about recency so this isn’t such good advice as written.

36. Great Content = Great Rankings. Just like great policies equals successful politicians, right?

I’m not sure what the author means by this point.  Content and in-bound links form the backbone of SEO efforts.  So don’t stop adding great content to your site!

ASP.NET MVC SEO – Solution Part 1

In a previous post I explained some of the issues with ASP.NET MVC when trying to implement an SEO-optimized web site.  In this post I’ll begin to explore some possible solutions.

Step 1: Master View – some additions

First let’s make it easy to set the meta description, page title, meta keywords and canonical url by adding the following to the head section of the master view:

<head id="Head1" runat="server">

    <title><%=ViewData["PageTitle"]%></title>  <%-- This gets wrapped here, so it sees a title tag and doesn't emit two --%>
    <%=ViewData["PageDescription"]%>           <%-- These are wrapped elsewhere so they vanish if not set--%>
    <%=ViewData["PageKeywords"]%>              <%-- These are wrapped elsewhere so they vanish if not set--%>
    <%=ViewData["CanonicalUrl"]%>              <%-- These are wrapped elsewhere so they vanish if not set--%>

    <meta name="robots" content="noodp" />  <%--Don't use Open Directory Project descriptions--%>

Note how we are not wrapping the canonical URL, and meta tags around the ViewData here (even though it would be more correct to do so). We do this so that when those tags are not present the entire tag disappears from the page instead of rendering a tag with an empty string in it. For the title tag however, that’s universal so let’s do it ‘properly’.

In tomorrow’s post I’ll show how we can set the Canonical URL using an attribute.

How SERP rankings changes over time – SEO

How SERPS changes over time for the top 100 ranked sitesBeing an engineer at heart I like to measure things and to take them apart to see how they work.  Search engines however are somewhat opaque – they use hundreds of different algorithms to create Search Engine Ranking Pages (SERPS) and those algorithms are a closely guarded secret and the subject of much debate and investigation in the SEO community.

So, since I wanted to learn more about SEO I decided to track and graph the top 100 ranked entries for a particular keyword over several weeks and here is the result.  Click to enlarge it.

Some observations:

(i) volatility is clearly a lot less in the top ranked sites – moving one position from 4 to 3 is going to be a lot harder than moving from 94 to 93.

(ii) some sites can have stunning leaps for a short time but then get reset back to their former position – presumably getting the ‘recent content’ lift but then failing to capitalize on it with more frequent updates.

(iii) search engine optimization (SEO) is not something you can do once and forget, it’s something you need to stay on top of with frequent updates to your site and constant in-bound link building efforts.

I plan to compare this chart against some other keywords I’ve been tracking to see how they compare.  I also want to track each site to determine what caused the particularly stunning leaps or falls in the rankings and learn from it.  Maybe a chart like this could help identify which keywords are more volatile than others and therefore which ones you can make most progress against.

It’s early days, I just generated the first chart a few hours ago, so stay tuned for updates on this project.

ASP.NET MVC meet SEO; SEO meet ASP.NET MVC

Whilst ASP.NET is clearly the best thing to hit .NET web development in a long-time it seems like the framework itself is somewhat challenged when it comes to SEO.   For starters the concept of a page has all but disappeared – sure you can have a ViewPage but there’s no code associated with it.  And sure, you have ASP.NET Routing so you can do anything you like with routes but the catchall route {Controller}/{Action}/{id} is as much a liability as it is a benefit as it catches things you really didn’t want it to catch and generates routes you really didn’t want to generate all too easily.

Convention over configuration is nice and all that, but sometimes a bit of configuration is necessary to bring your house into order, especially when the convention doesn’t allow things you really want for SEO.

So let’s take a look at all the things we really want to be able to do when creating an SEO friendly web site and see how we can get ASP.NET MVC to handle them.

For SEO we need:-

1. The ability to define a canonical url for a page.  To use that canonical URL whenever we generate a route.  To include that canonical url in the page header to instruct search engines that this is the canonical url for that page.

2. The ability to define multiple alternate URLs for a page.   Plans change and your site changes too but you don’t want 404 errors, you want the user to land on the same page even if you changed the URL to improve its SEO keyword content for example.  Ideally you’d like to 301 redirect these legacy urls but having them at least display the right page and including the canonical url in the header for that page is good enough.

3. The ability to use hyphens in urls.  But since Controllers are classes and Actions are methods and the convention is to use them as parts of the URL this isn’t supported out of the box.

4. The ability to define title, meta description and meta keywords tags for a page in such a way that you can enforce rules around them such as requiring every public page to have a title tag, or ensuring that the length of the title tag is reasonable, or ensuring that your product name is on the end of every title tag.

5. The ability to build a sitemap.xml file that we can submit to Google or Bing containing every URL that we want them to index.

In my next few posts I’ll explain how we can overcome all of these shortcomings of ASP.NET MVC to create a great SEO-friendly web site.

Stay tuned!

Building sitemap.xml for SEO ASP.NET MVC

Creating a sitemap.xml file for Google and other search engines can be accomplished in MVC using a simple ActionResult that returns the appropriate XML blog. The problem however is in generating the list of URLs to go into that sitemap.xml file.

In ASP.NET MVC there is no distinction between an action method that is a page and one that is a service call. To remedy that let’s create an ActionFilterAttribute that can be applied to any method to mark it as a page and to record the URL that we want that page to show up as in our sitemap:

1 /// <summary>

2 /// This attribute indicates that a method is an actual page and gives the data for it

3 /// </summary>

4 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]

5 public class MVCUrlAttribute : ActionFilterAttribute

6 {

7 public string Url { get; private set; }

8

9 public MVCUrlAttribute(string url)

10 {

11 this.Url = url;

12 }

13

14 public override void OnResultExecuting(ResultExecutingContext filterContext)

15 {

16 string fullyQualifiedUrl = filterContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority) + this.Url;

17 // We build HTML here because we want the View to be easily able to include it without any conditionals

18 // and because the ASP.NET WebForms view engine sometimes doesn’t subsitute <% in certain head items

19 filterContext.Controller.ViewData["CanonicalUrl"] = @”<link rel=”"canonical”" href=”"” + fullyQualifiedUrl + ” />”;

20 base.OnResultExecuting(filterContext);

21 }

22 }

You may wonder at this point why we can’t just use the Routing table to figure this out. The issue is that multiple routes may map onto one page but we still want it to show up just once in the sitemap otherwise we will get slammed for duplicate content. We also want to be able to mark each page with its canonical URL.

Now we can use reflection to find all of the ‘pages’ in our ASP.NET MVC Application and then build a sitemap.xml file from them.

1 List<string> allPageUrls = new List<string>();

2

3 // Find all the MVC Routes

4 Log.Debug(“*** FINDING ALL MVC ROUTES MARKED FOR INCLUSION IN SITEMAP”);

5 var allControllers = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(Controller)));

6 Log.DebugFormat(“Found {0} controllers”, allControllers.Count());

7

8 foreach (var controllerType in allControllers)

9 {

10 var allPublicMethodsOnController = controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance);

11 Log.DebugFormat(“Found {0} public methods on {1}”, allPublicMethodsOnController.Count(), controllerType.Name);

12

13 foreach (var publicMethod in allPublicMethodsOnController)

14 {

15 var mvcurlattr = publicMethod.GetCustomAttributes(true).OfType<MVCUrlAttribute>().FirstOrDefault();

16 if (mvcurlattr != null)

17 {

18 string url = mvcurlattr.Url;

19 Log.Debug(“Found “ + controllerType.Name + “.” + publicMethod.Name + ” <– “ + url);

20 allPageUrls.Add(url);

21 }

22 }

23 }

Seo for beginners

Many friends have asked me for advice on optimizing their site for search engines so I thought I’d put together some notes here collecting the advice I’ve handed out recently.

1. The first thing to do is to get a Google analytics account and add the tracking code to all your pages.  Unless you are measuring your current site’s performance you’ll never know how much you’ve managed to improve it.

2. If your site is a simple static site consider whether it would be better to create it using a content management system like WordPress than to try to do it yourself in HTML using Notepad (or some better tool).  WordPress will mostly do the right thing for you in terms of building a search engine optimized site.

3. Next, go to Google Adwords and figure out what keywords you should care about.  Start with the keyword phrases you think people might use to find your site and then use their keyword tools to expand those phrases to generate lists of keywords and their related volumes.  Look at the local search volume for local services or the global numbers.

4. Use the Google Adwords downloadable keyword tool to generate a CSV of all the ones that make some sense to you or if you prefer a more graphical approach, try my SEO Keyword Search tool which can give you an idea about how they are related and how important each is.

5. Armed with a list of keyword phrases sorted by volume you are now ready to start crafting pages for your site that will be found by people using Google, but before you start writing pages, check your domain name.  Is it really the best domain name for what you are offering.  Sure it’s nice to have a fancy company name and a domain name that matches but will people be finding you by word of mouth or will they in fact be using search engines, email links, links from other web pages, …?  If you plan to be the next Amazon.com one day, go ahead and use your fancy company name, otherwise, consider naming your site something highly functional that includes the keywords you want to be found using.

6. Make a plan for how you will map keywords to pages.  How many pages do you need? What words should be optimized on each page?

7. Build your site pages.  For each page, make a note (comment in HTML maybe) of the keywords for which you are optimizing that page.  I suggest putting them in the HTML so you remember never to change them by accident.  Using those keywords create an URL for the page, a Title, an H1 heading and ideally some bold text and some images with ALT text including those keywords.  Create a meta keywords tag including just those words (arguably search engines mostly ignore the keywords meta tag now).  Create a meta description that is actionable because this is likely to be the line your customers see in Google – use verbs, explain why your page is interesting, encourage them to click through to you.  Don’t use the same description on every page on you site, make it relevant to the page it is on.

8. If you ever move a page that has been indexed, be sure to use a 301 redirect to transfer the user to the new page and to tell the search engines where to go.

9. Make sure all your pages are accessible through links on the site.  A site map down the bottom of the page listing all the pages on your site is a good way to do this.

10. Use Google.com/Webmasters to check your site for mistakes.

11. Update your site frequently so that Google thinks that it’s newsworthy and so that they index you more often.

12. Consider putting your blog on your site (or using WordPress make blog and site the same thing with Pages and Posts as appropriate).

13. Get the free tools from SeoMoz, use them to check each page of your site to make sure you have URL, Title, H1, B tags all containing the keywords for that page.  Make sure your meta description tag is what you’d want the user to see if they found your page in Google.

14. Once your site is keyword optimized now it’s all about inbound links from relevant sites but only ones that aren’t ‘nofollow’ on their links.  SeoMoz has a toolbar for Firefox that will show you whether links on a page are nofollow.  Visit relevant sites where you can comment and include a link back to your site.  If SeoMoz shows the link backs in pink, don’t bother commenting, go find somewhere else that will give you some credit for your work in crafting relevant comments.

15. Do not pay for any links from directory sites or otherwise.  Google and Bing discount them and may even penalize you for doing them.

16. Do list your business on Bing and Google local business listings

17. Some of the free press release sites and article sites can be worthwhile – write some articles and seed them, but check them with SeoMoz first to see if the links are marked ‘nofollow’.

18. Don’t do anything “black hat”!  No hidden white text just for the search engines, no cloaking, no browser detection to show different content, …