Send mail to the author(s) E-mail

View Richard Soeteman's profile on LinkedIn

RSS 2.0 | Atom 1.0 | CDF




The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Sign In


# Friday, October 3, 2014
Friday, October 3, 2014 12:14:22 PM (GMT Daylight Time, UTC+01:00) ( SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Recently Google announced that it will use HTTPS as a ranking signal in the future. With SEO Checker I don’t follow trends but this one will be in a future release since it’s coming from Google itself. But this will be a change in the configuration screen since it’s too bloated already, and that is not something for a small bug fix release. Anyway a customer already asked if there was an easy way to do this in SEO Checker. The answer is yes. Until today this wasn’t documented but if you reference the SEOChecker.Extensions project you can use the UrlRewriterProviderBase class.

When you see  the snippet below you’ll see that it’s really easy. Just modify the UrlBuilder object that is coming in. In the case of always https we set the scheme to HTTPS when the incoming request comes from http. Compile this class add it to the bin folder and it will be picked up automatically by SEO Checker and redirects to Https for all website requests (umbraco requests are not redirected automatically).

   1: /// <summary>
   2:  /// Forces Redirect to HTTPS
   3:  /// </summary>
   4:  public class HTTPSRedirect : UrlRewriteProviderBase
   5:  {
   6:      public override void RewriteUrl(UrlBuilder builder, UrlRewriteConfiguration config)
   7:      {
   8:          if (builder.Scheme.Equals("http", StringComparison.InvariantCultureIgnoreCase))
   9:          {
  10:              builder.Scheme = "https";
  11:          }
  12:      }
  13:  }

Canonical URL

If you are familiar with SEO Checker already you have probably used the Library methods  to generated all meta data. This library generates the canonical link tag also. When you rewrite your url’s using the SEOChecker UrlRewriter it will use your class also to determine the canonical url (’'). This is a benefit you don’t get when you apply your own rewrite rules in web.config.

   1: <title>Getting Started | SEO Checker</title>
   2: <meta name="description" content="You&#39;ve installed Umbraco and the &quot;Txt&quot; Starter Kit." />
   3: <meta name="robots" content="index, follow" />
   4: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   5: <link rel="canonical" href=""/>

Download the source for this project. Drop the SEOChecker.HTTPSRedirect.dll in the bin folder and it will start redirecting to HTTPS immediately.

Happy rewriting!

Comments [0] | | # 
# Thursday, December 5, 2013
Thursday, December 5, 2013 2:52:40 PM (GMT Standard Time, UTC+00:00) ( CMSImport | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

I’ve just released version 2.5 of CMSImport. This version is optimized for Umbraco V7 and should work as expected on older versions.One thing that’s changed is the use of Field adapters, the feature you only use when you need to manipulate data during import.  The Field adapters  still work but there is a better approach now, called Field providers. This change was already on the list of changes for CMSImport version 3 but got into the 2.5 release due a change Data type settings change in Umbraco V7. As you can see in the image below Id’s used to be GUIDS and are changed to alias strings in V7.


What is a Field provider?

A field provider is a class that implements IFieldProvider and gets called during the import process to convert a value to the format Umbraco expects. For the above mentioned data type it will convert text values to the corresponding id values.  Below the Field adapter that is used in CMSImport for the Dropdownlist data type.

   1: /// <summary>
   2: /// Responsible to map the id of the dropdownvalue based on  the text value.
   3: /// Internally Umbraco uses this value.
   4: /// </summary>
   5: [FieldProvider(PropertyEditorAlias = "a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6", Priority = FieldProviderPrio.Medium)]
   6: [FieldProvider(PropertyEditorAlias = "Umbraco.DropDown", Priority = FieldProviderPrio.Medium)]
   7: public class DropdownFieldProvider : IFieldProvider
   8: {
  10:     /// <summary>
  11:     /// Parse the data for the dropdownlist
  12:     /// </summary>
  13:     /// <param name="value">The value to parse</param>
  14:     /// <param name="property">The property</param>
  15:     /// <param name="fieldProviderOptions">The options</param>
  16:     /// <returns></returns>
  17:     /// <exception cref="System.NotImplementedException"></exception>
  18:     public object Parse(object value, Property property, FieldProviderOptions fieldProviderOptions)
  19:     {
  20:         if (!value.IsNullOrEmpty())
  21:         {
  22:             int datatypeId = property.PropertyType.DataTypeDefinition.Id;
  24:             string dropdownValue = PreValueHelper.GetDropdownValueByText(value, datatypeId);
  25:             if (!string.IsNullOrEmpty(dropdownValue))
  26:             {
  27:                 value = dropdownValue;
  28:             }
  29:         }
  30:         return value;  
  31:     }
  32: }

One Field provider for more than one data type

As you can see in the above example. It’s possible to use one Field provider for more than one data type because you need to decorate a Field provider with the FieldProvider attribute. In the PropertyEditorAlias parameter you specify the Alias(Umbraco V7) or GUID(Umbraco V4 and 6). You can add as many attributes as you like, its also possible to have more than one Field provider for a single data type.

The second parameter is the priority which describes the order of execution. In case you have some data that is not 100% correct you can change this before it get’s parsed by the default Field providers of CMSImport. The default priority of all Field providers used by CMSImport are Medium. Use High priority if you want to parse the data before the default Field provider parses the data. Or use Low priority when you want to parse data after the the default Field provider parsed the data.

So when you map the following data against the dropdown list:

  • Cars
  • Car’s
  • Carss

You probably want to make sure this gets all import as Cars. Really easy to do with a Field provider. As you can see in the example below I’ve implemented a Field provider gave it a high priority so it will be picked up before the default one and return Cars when the value starts with car.

   1: using System;
   2: using CMSImport.Extensions.FieldProvider;
   3: using CMSImportLibrary.TypeExtensions;
   4: using;
   6: namespace CMSImportLibrary.Providers.FieldProviders.DefaultFieldProviders
   7: {
   8:     [FieldProvider(PropertyEditorAlias = "a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6", Priority = FieldProviderPrio.High)]
   9:     [FieldProvider(PropertyEditorAlias = "Umbraco.DropDown", Priority = FieldProviderPrio.High)]
  10:     public class DropdownFixFieldProvider : IFieldProvider
  11:     {
  12:         public object Parse(object value, Property property, FieldProviderOptions fieldProviderOptions)
  13:         {
  14:             return !value.IsNullOrEmpty() && value.ToString().StartsWith("car", StringComparison.InvariantCultureIgnoreCase) ? "Cars" : value;
  15:         }
  16:     }
  17: }
Comments [0] | | # 
# Monday, September 2, 2013
Monday, September 2, 2013 6:00:05 PM (GMT Daylight Time, UTC+01:00) ( SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

SEO Checker comes with a bunch of nice tools that helps you easy optimize  your site for SEO. Today I want to show you the Not Found pages functionality that is introduced in SEO Checker V1.2. I’ve always found it hard to configure not found pages for multiple sites and more than one language. You needed to tweak the configuration to get language specific not found pages working, or install uComponents and adding properties to the document types. And of course IIS and Umbraco present you different default error messages that we need to configure. I’m sure we this picture looks familiar where the .aspx version shows a different than the same url with .php as extension.

different 404 errors in Umbraco

With SEO Checker it’s now possible to specify  a not found page per site and per language. When you open the SEO Checker section and open the domain settings menu from settings. All domains that are configured as a root are listed. For each domain and language (1 in the image below)  you can then specify the not found page (2 in the image below) and the next time there is page not found on your site it will display the nice page you configured instead of an ugly one.

page not found settings seo checker

Want to check the result yourself? Install SEO Checker on your local machine, the trial version allows you to test this functionality on local host.

Comments [0] | | # 
# Wednesday, August 21, 2013
Wednesday, August 21, 2013 11:11:52 AM (GMT Daylight Time, UTC+01:00) ( CMSImport | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

CMSImport PRO always had support for uBlogsy. When testing the latest version of uBlogsy I found that it was completely different from the V2 version. The latest version of CMSImport PRO (2.4 and above) support version 3 also. The version 2 version of uBlogsy was easier to use from an Import point of view. Most relations to authors etc were stored as comma separated values. This is changed to MNTP now. So thanks to uBlogsy, CMSImport supports lookups for MNTP now :). But as mentioned above there are a few steps you need to do to import content in uBlogsy, so in this blog post I try to explain the process form importing all data from a Wordpress file (thanks Morten for sending me one).


First we need to install uBlogsy V3 and CMSImport. In this post I’ll be importing the comments also, therefore I need to install uCommentsy (the new commenting system for uBlogsy that is not in out of the box)also. From version 2.4 of CMSImport not all Data Adapters are included in the core package anymore, this is to avoid a large list of available adapters that most people don’t use. So to import Wordpress data we need to install the additional CMSImport.DataAdapters.Wordpress package also. Before starting CMSImport make sure you have your license file in the bin folder of your Umbraco installation also.

uBlogsy is using MNTP for assigning authors and Labels (Categories in Wordpress). The XPath configuration gave me some issues when using uBlogsy. It couldn’t find the rootnode when editing posts.  By default the xPath configuration is searching from the current node as you can see in the image below.


This might be ideal when you run multiple blogs with multiple authors and labels but for my situation selecting all authors and categories works fine and is then always available in the post. To change the xpath configuration open the following datatypes and update the xpath.

DataType XPath expression
[uBlogsy] [MNTP] Author Picker //uBlogsyContainerAuthor
[uBlogsy] [MNTP] Label Picker //uBlogsyContainerLabel

Before importing the posts we first need to import author, categories and tags data. CMSImport can use this data for lookup values and assign the values during the import of Blog posts.

Import meta information

CMSImport will automatically assign meta information such as Author, Labels (Categories in Wordpress) and  Tags. This will be based on a lookup value, when CMSImport can find the related node it will assign it to the Blog post otherwise it will be ignored. So the first thing we need to do is import the meta information. When you open CMSImport and select import data you should use the following data adapters to import the meta information:

Data adapter  
Wordpress Authors Imports authors from a Wordpress export file
Wordpress Categories Imports the labels from a Wordpress export file
Wordpress Tags Imports the tags from a Wordpress export file

When you hit next for any of the above Data Adapters you need to select a location. Below the example for authors, tags and labels work the same. You will also see that the document type is automatically assigned. This is because CMSImport knows that uBlogsy is installed. Also the mapping is automatically assigned correctly. So after assigning the location you can hit next a few times and the Meta information will be imported.


Importing blog posts

Ok we are coming to the real task, importing the blog posts. This the same as importing the meta information. First you select Wordpress blog posts as the datasource. Then select Blog as the root to import the data. uBlogsy will automatically create the date folders  when you are importing. Also the mapping is created automatically. When you import the data the meta information will be assigned automatically. After importing the data save the Import definition, we need it again when importing the comments. After the import definition the  post info tab of a blog post  should look similar as the image below. Author, tags and label info is assigned automatically.


Importing comments

The last step is importing comments. This is a bit different from importing the above information. To import the comments, open the CMSImport saved imports tree for content. Right click on the saved import definition for posts and select Create child definition and select Wordpress comments as the data source. You don’t need to pick a location on the next step. CMSImport will find the location based on the imported posts. All other steps are exactly the same as importing the other data.


Once the data is imported your tree should look something like this.


That’s it

That’s all you need to do to import Blog posts and comments from a Wordpress site into uBlogsy 3 for Umbraco. If your Wordpress file contains pages also you can use the Wordpress page data adapter to import the page data as well.  This article can also be used if you have BlogML data, replace Wordpress with BlogML adapters and all should work.

Happy importing!

Comments [0] | | # 
# Thursday, February 14, 2013
Thursday, February 14, 2013 10:29:23 AM (GMT Standard Time, UTC+00:00) ( SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

It took a few months of development but I’m glad to finally announce SEO checker V1! If you haven’t done already you can read previous blogposts about this package or watch the screencasts about SEO checker. I think it’s a package every site should have installed, when building sites for clients. I have followed the #umbraco tag on twitter for more than a year and have seen most sites that are released contain SEO issues.  When those sites had SEO Checker installed it would have warned you before putting the site live. So I hope you will at least download SEO checker and check you sites on localhost before putting it live.

Using SEO Checker for content editors

There is one big feature the previous blogposts didn’t cover and that is using SEO Checker for content editors.SEO Checker comes with a Data Type that can be added to document types. The SEO Checker Data Type will show a Snippet preview how the page will be shown  in the Google search results. If you are using a relevant  Title and Meta Description Google will use these in the search results. Therefore these elements are important.

It’s possible to specify a focus keyword, this is the keyword you want to rank the page for, use the Keyword tool icon to get help selecting the keywords you want to rank the page for.  SEO Checker will validate if the keyword can be found in the most important elements of the page:

  • Page Title (H1)
  • Url
  • SEO Title (<title>)
  • SEO  Description (<meta name="description"…..)
  • At least once more in the text of the page

You can also specify the SEO Title, SEO Description and SEO keywords (when configured). The page will also be checked for other SEO Issues on the page.  See the documentation for a list of all validations.
The unpublished version of the page will be checked, this allows you to solve issues before publishing the page!

Configuration of the Data type

By default the SEO Checker data type will show a field for SEO title and description. If you already have those properties on your document type you can use configuration of the document type to map those .


1.    Map SEO title against the existing SEO title property
2.    Map SEO keywords against the existing SEO keywords property
3.    Map SEO description against the existing SEO description property
4.    Use the keywords meta tag (Google and all major search engines ignore this meta tag).

Document type meta data configuration

Using default SEO Properties you can specify default values  for SEO Title and SEO description. When the page is missing the SEO title or description info these mapped properties will be used.  The title will be copied. The description will take the first paragraph from the mapped property. This ensures you always have you meta tags filled. The validation process will validate if the tags are matching length criteria.

Title template

It’s also possible to specify a template for the SEO Title. This template will be used to render the <title> tag in snippet preview and on the page.The template can contain fixed text and placeholders, placeholders have the same syntax as you would use in Umbraco Macro’s:

  • [#Property alias ] will get the property from the current document
  • [$property alias] recursive look up the property

The following fixed properties can be used in the template:

  • @nodeName contains the name of the page
  • @seoTitle contains the value of the SEO title property

When using the above template configuration the <title> tag will be rendered as:

<title>Simple website | Simple website &#169; 2013</title>

Use Metadata inside your template

SEO Checker comes with a small library to render Meta Tags in HTML. This is only necessary when you use the SEO Checker data type. You can use the library in Razor, XSLT and usercontrol macro’s. The library can be used in both MVC and Masterpage mode. To render the metatags for the current page in razor simply use:

This will render all metatags for the page like this:

<title>Using Modules | SEO Checker</title>
<meta name="description" content="Umbraco modules encapsulate specific bits of advanced functionality that are easily added to your website." />
<meta name="robots" content="index, follow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Download V1 Trial

What are you waiting for. download SEO Checker and have a play on your local machine!

Comments [0] | | # 
# Monday, February 4, 2013
Monday, February 4, 2013 1:32:47 PM (GMT Standard Time, UTC+00:00) ( SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

The RC is already removed from the version info, a release is around the corner! A perfect time to talk about validating pages using SEO Checker. To validate a site, or a portion of a site for SEO issues, open SEO Checker and select the Validate Pages option from the menu. This will show the following screen. By default the root is selected, if you want to validate a portion of a site specify the start location. When the include children is checked all published children will be validated also. When you hit start the pages will be added to the validation queue.

 validate pages

Besides this manual process, pages will be added to the validation queue when they are published also. Only published pages having a template assigned will be validated!

Validation queue

Pages will not be validated immediately, instead they will be added to the validation queue. Validation occurs on the background so you will not have to wait until the validation process is finished. When all pages are validated the result will be available in the Validation issues overview.


Validation issues

This overview will show all issues found when validating the page. The documentation will contain a full list of validation when it’s released. When an issue contains the description “Template issue” it means that the issue is found in the template. A template issue is only reported once for every template instead of reported on every document that uses the template.



  1. When selected warnings will included in the overview.
  2. When selected errors will included in the overview.
  3. When a period is selected solved items since the selected period are also displayed in the overview. Solved issues are displayed in strikethrough. In the example above the metadata issues are solved.
  4. Opens the document in a popup
  5. Opens the template assigned to the document in a popup. This option will only be available for Users that have access
  6. Deletes the issue from the overview, or adds the item to the ignore list.

Delete and ignore issues

Using the delete button in the various overviews you can delete an issue from the overview. This will show the following dialog.


When you hit “delete” it will just remove the item from the overview. Next time validation occurs the issue will be reported again. When you check the “Ignore this issue next time” checkbox the item will be added to the ignore list and the issue will not be reported again next time validation occurs. Use the Ignore list overviews to see which items are ignored.


Want to try SEO Checker today? Download the release candidate.

Non production Warning:
This is a  release candidate!! SEO checker is tested on different sites but can still have some issues in specific situations. We love to get some feedback but don't use this package in production yet! If you find any issues please send us an email and we will get back to you ASAP!  Also keep an eye on our hotfix location! Here you find the most recent bugfixes.  The release candidate will expire on May 1th 2013. After May 1th it will fall back to trial mode which means it will only work on localhost and you can only validate one page at a time.

Comments [0] | | # 
# Tuesday, January 22, 2013
Tuesday, January 22, 2013 8:58:32 PM (GMT Standard Time, UTC+00:00) ( Package | SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

After releasing the beta version of SEO Checker almost two months ago, it’s time for a release candidate. An exciting time because if all goes well we have the final release available in just a few weeks(it’s all about writing the user manual ;-) ). The release candidate solves the following issues found in the beta version:

  • Fixed encoding issues in the validation process
  • Added a validator to prevent robots.txt, or meta follow/index  is blocking the whole site being crawled
  • If a robots.txt file exist on disk, use that one instead of generating a dynamic one
  • Fixed several issues regarding  url rewriting
  • Fixed several issues regarding broken inbound links
  • Changed low level error messages to user friendly ones when an exception occurs
  • Added several improvements in configuration
  • Fixed Umbraco V6 RC compatibility issues

If you already installed SEO Checker beta it’s best to upgrade since the beta expires February 1th and upgrading is easy, just use the package installer. So what are you waiting for….download the RC today

Non production Warning:
This is a  release candidate!! SEO checker is tested on different sites but can still have some issues in specific situations. We love to get some feedback but don't use this package in production! If you find any issues please send us an email and we will get back to you ASAP!  Also keep an eye on our hotfix location! Here you find the most recent bugfixes.  The release candidate will expire on May 1th 2013. After May 1th it will fall back to trial mode which means it will only work on localhost and you can only validate one page at a time.

Comments [0] | | # 
# Wednesday, January 16, 2013
Wednesday, January 16, 2013 9:51:44 AM (GMT Standard Time, UTC+00:00) ( Package | SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

A couple of weeks ago I blogged about SEO Checker. With the first release candidate and final release around the corner it’s time to highlight some features. Today I want to talk about fixing Inbound Links.We all had this experience, searching for information and found a page in Google and when we hit that link we get a 404 page, friendly message or not it’s not the best experience and Google doesn’t like this either.

In the example below I’m using the basic starter kit that comes with Umbraco and visit the page gofurther.aspx. the 404 page will be shown, but SEO Checker will also log the url.  When you open the  Inbound link error page in SEO Checker you will see that gofurther.aspx is reported as broken. Using the content picker you can select the page you want to redirect to. Next time someone is visiting the gofurther.aspx the request is redirected to the selected page.


Handling different extensions

If you migrate a site from php environment you can setup the same structure in your umbraco site. Let’s say the previous php site had this structure:


Our new Umbraco site is using aspx extensions (or no extensions at all), so when we try to access the installing-modules.php page, the visitor will see a 404 page.  If you have SEO Checker installed it will make sure the installing-modules.php page will be redirected to the installing-modules.aspx page.

This means search results from Google will still work (and get updated to the new page because of the 301 redirect) and all links to the php version of your site will still work.

When the page cannot be found at all the url will be logged and we can map the correct url on the Inbound Links page as described in the previous scenario.

Handling structure changes

When you rename or move a document in Umbraco the structure will change. For example when we change the Installing modules page to Installing Umbraco modules. The url changes from installing-modules.aspx to installing-umbraco-modules.aspx. The result will be that when people are visiting the old installing-modules.aspx  url, they will see a 404 instead of the Page. SEO Checker will keep track of changes in the url structure and will redirect the old installing-modules.aspx  url to the new installing-umbraco-modules.aspx url.

If you are only interested in this scenario you might want to check out the free 301 Url Tracker package.

Comments [0] | | # 
# Friday, November 30, 2012
Friday, November 30, 2012 9:24:41 AM (GMT Standard Time, UTC+00:00) ( Package | SEO Checker | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

For those of you following me on twitter probably know I’ve been working on a new package, SEO checker for the last few months(thinking about it for a few years). Today it’s time to finally release the first beta version of this package and this is the first blog post giving you an overview of most possibilities. The next blog posts will cover more detailed information about a certain feature.

SEO Checker is build to optimize your Umbraco Site SEO! It will help you find common SEO issues on the website, help you pages rank better for a certain keyword by making sure that keyword is found on the necessary HTML elements. It comes from the idea that most Umbraco websites have SEO Issues, missing meta tags, canonical url’s , broken links, test content, inline scripting, huge viewstate (my favorite ;-)) etc. When you install SEO Checker you will find a new section where you can validate pages, find inbound link errors and find configuration errors.

I’ve recorded a few screencasts that demo the functionality, check them out. I would love to have feedback so please read further, watch the screencasts,  install the package and let me know what you think.

Validate pages

SEO checker allows you to validate a complete  site, or portions of a site. Simply select validate pages from the menu, select a root node and hit start, as you can see in the image below. 
Validation happens on a background thread, you can validate 1000 pages without having to wait for the results before leaving the page. Instead pages are added to the validation queue first.


When you publish a page it will automatically being added to the validation queue by default.

Once the validation queue is empty you can open the validation issues page which gives you an overview of all validation issues for a given page or template. All validations are (somehow) based on the Search Engine Optimization Starter Guide document from Google , so it’s based on facts and not on opinions from SEO consultants. You can filter the overview by errors and  warnings.It’s also possible to show resolved issues since a given date. The image below shows you the url to is resolved and shows you a few open issues. You can edit the page, or template directly from this overview. It’s also possible to delete the item from the overview. When you delete the item you can select the option to always ignore the issue during validation.



SEO checker datatype

SEO checker allows you to preview the Google search result snippet using the SEO checker datatype when editing content  and will give feedback about keyword usage in content and meta information. The same datatype will report validation issues based on the unpublished version of the document. This allows you to fix all issues before publishing the page to your website. In the image below you’ll see that we want to rank the page for Umbraco Modules.  If the keyword is not found in a certain tag, this will be reported as a validation issue.


SEO checker will look for the focus keyword in the following tags:

  • Title
  • Meta description
  • H1
  • Body
  • Url of the page

SEO checker will also report any other content related issue it found on the page. In this case it found the broken link htp:// SEO checker knows this must be and suggest you will use http:// instead of htp:// in the error description.

Fix and avoid Inbound link issues

SEO checker will report any inbound link that is broken. To fix a broken link you select the page you want to redirect to and the next time a user is browsing to the broken link the user will be redirected to that selected page. In the example below the user requested installin-modulezz.aspx. This was reported as broken. and is now pointing to the installing modules page. So the next time a user is requesting the installin-modulezz.aspx the request will be redirected to installing-modules.aspx.


Seo checker will avoid broken links by redirecting  url’s with the wrong extension to the correct one. So if a user is requesting the request will be redirected to When you rename or move a document inside Umbraco SEO checker will makes sure every request for the old url is redirected to the new url.

Dynamic robots.txt and sitemap.xml

SEO checker allows you to generate a dynamic Robots.txt and Sitemap.xml files. This will make sure search engines don’t index Umbraco system folders and allows you to submit an xml sitemap to Google. You can specify settings for the xml sitemap per document type, so if you want to exclude a certain document type or change the priority it’s possible with a few clicks.


URL Rewriting

You want to make sure every page can be accessed by one url. If a url can be accessed with and without www. prefix for example, search engines treat those url’s as unique and it can cost you page rank. When I was building SEO checker I had some issues with URL rewriting by editing the XML configuration files. To make it easier for you SEO checker comes with a built-in URL rewriting module that you can configure with a few mouse clicks (only one if you are not using directory url’s). 



SEO checker requires:

  • IIS7
  • Umbraco Version 4.8 and up.
  • One of the following database SQL Server 2005/2008 (Express), SQL CE 4 and Mysql
  • modify rights to folders: /bin, /umbraco, and /app_data folder

Commercial package

Once the beta is over SEO checker will be a commercial package.Prices will be the same as the CMSImport  package:

  • € 99,00  for a domain license
  • € 299,00 for a server license
  • € 499,00 unlimited license


Update 1/22/2012 : SEO Checker Release candidate is available

Download the beta version of SEO checker today.

BETA Warning:
This is a Beta release!! SEO checker is tested on different sites but can still have some issues in specific situations. We love to get some feedback but don't use this package in production! If you find any issues please send us an email and we will get back to you ASAP!  This beta version will expire on Feb 1 2013.

Also keep an eye on our hotfix location! Here you find the most recent bugfixes.

Comments [1] | | # 
# Tuesday, September 25, 2012
Tuesday, September 25, 2012 9:36:02 AM (GMT Daylight Time, UTC+01:00) ( Package | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

A couple of months ago, Umbraco V4.8 was released and when I was testing CMSImport against this version I got a weird exception.


What happened?

I’m using the HTMLAgilityPack to extract images and files from the bodytext property so we can import them into Umbraco. In previous versions, Umbraco shipped with the 1.3.0 version. The version of the HTMLAgilityPack that is shipped in 4.8+ is version Since the dll is signed it’s throwing an error in case of a version conflict. I’ve seen a post on the forum where Lee Kelleher describes a similar issue. In the case of UComponents it’s the Lucene DLL but it’s the same problem as I was facing. To fix this issue as described in the forum thread requires an entry in the web.config file and putting the Legacy DLL into a separate folder. It’s all fine to use upgrade instructions for a client project but when you develop a package you don’t want your customers manual upgrade web.config files for a specific version. You also don’t want to have a big if statement in your installer that creates entries based on a version number and you also don’t want to drop support for older versions of Umbraco because of this minor conflict.

The solution

After searching a bit, I found this interesting article that describes the AppDomain.AssemblyResolve Event. This event gets triggered when an Assembly is required that can’t be found and allows you to return the correct assembly. In our case the DLL Version of HTMLAgilityPack. In the example below you see that I derive my class from ApplicationBase (I know there is a new class in 4.8, but I’m still supporting 4.7 also ;-)) so this class will be picked up automatically . When the  required assembly (Args.Name on line 13) is the HTMLAgilityPack Version 1.3.0 I load that assembly from the /bin/legacy/ location and all is working again :) 

Update 2-10-2012 Modified source code. It doesn’t use HTTPContext anymore since that might not be available

   1:      public class UpdateThirdPartyDllBindings : ApplicationBase
   2:      {
   3:          public UpdateThirdPartyDllBindings()
   4:          {
   5:              AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
   6:          }
   8:          /// <summary>
   9:          /// Assembly could not be resolved let's see if we can load it dynamically
  10:          /// </summary>
  11:          Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
  12:          {
  13:              if (args.Name == "HtmlAgilityPack, Version=, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a")
  14:              {
  15:                  try
  16:                  {
  17:                      //Get the bin folder. Don't use HTTPContext since that can be null
  18:                      string binFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\legacy");
  19:                      string legacyFile = Path.Combine(binFolder, "HtmlAgilityPack.dll");
  20:                      return Assembly.LoadFile(legacyFile);
  22:                  }
  23:                  catch (Exception ex)
  24:                  {
  25:                      Log.Add(LogTypes.Error, -1, string.Format("SEOChecker error loading HTMLAgilityPack version {0}:{1} ", args.Name, ex));
  26:                  }
  27:              }
  28:              return null;
  29:          }
  30:      }

All I need to do now is make sure the Legacy DLL is shipped in the package. When you are using an older version of Umbraco this Legacy DLL will exists in your bin folder but will be ignored and for version 4.8 + the AssemblyResolve implementation will make sure the legacy DLL is loaded.

Hope this helps you solve version conflicts of dll’s in your own packages

Comments [0] | | #