First time here? You may want to check out the blog archive, subscribe to the RSS feed, sign up for free email updates, or follow me on Twitter. Thanks for visiting!

Minimize Duplicate Content by Avoiding DNN's LinkClick.aspx 

Almost a year ago in my DNN SEO quick start guide I talked about minimizing duplicate content by crafting “well-formed internal links” and over the last few months many of you wrote in to ask what exactly I meant by that.

We’ll get to the bottom of the issue in a moment, but first let’s refresh the idea of “duplicate content” again. Ideally, every URL of your website should correspond to exactly one unique page within your website. And that’s generally how it worked back in the day when most sites were made up of static HTML pages. That all changed though as larger sites started moving their content into databases and pages were assembled “on the fly.” And as ecommerce and content management systems gained in popularity, multiple URLs leading to the same page became quite common. That in turn did not sit well with Google and other search engines as it undermines the quality of web search results, which sparked rumors of search engines coming down on webmasters with “duplicate content penalties.”

Today, according to Google, there is no need to lose sleep over duplicate content as long as you try to minimize it by reasonable means. One way of doing so is to pay attention to the internal links you create within DotNetNuke. Our number one enemy here is the DNN URL control (also known as LinkClick.aspx), which facilitates link building in modules such Announcements, Links, Text/HTML and others.

DNN Text / HTML Module | Browse to Page

 

DNN Text / HTML Module | Select Page

DNN Text / HTML Module | Select LinkClick.aspx

 

As you can see in the above screenshots, when you go through the steps of creating a link the “point and click” way in the FCKeditor, you’ll end up with an anchor tag that looks like this:

<a href="/LinkClick.aspx?link=53&amp;tabid=56">DNN SEO Blog</a>

Technically this link obviously works, meaning it will take your visitor to the intended page on your site. However, you’ve just produced a piece of duplicated content in the eyes if search engines as you’ve now 2 URLs leading to one and the same page. Furthermore, and maybe more importantly, you are wasting “link juice” or “votes” for the page you are linking to by referencing it via multiple URLs. Here is what the anchor tag should look like instead:

<a href="/blog.aspx">DNN SEO Blog</a>

As a general rule, follow the URL structure as laid out in your main menu. If you have to rely on creating links via FCK’s Insert/Edit Link button, then typing or pasting the URL from the browser address bar is your only option:

DNN Text / HTML Module | Enter URL Manually

And if you think that switching to a different WYSIWYG editor will solve the problem, think again. Telerik’s editor, for instance, creates URLs such as this one when picking from the Custom Links dropdown:

<a href="/Default.aspx?TabName=Blog">DNN SEO Blog</a>

Hardly any better.

The very same problem arises when using the Links and the Announcements module with link counter turned on:

DNN Links Module | Select Page

Simply unchecking “Track Number of Times this Link is Clicked?” takes care of the issue here. I like to argue that link tracking is better handled by your web analytics provider instead of DNN itself.

Starting with version 4, DotNetNuke has considerably cut down on duplicate content issues, but the dreaded LinkClick.aspx is still with us to this day. Fortunately, a heightened awareness of what’s going on behind the UI and a basic understanding of what constitutes a well-formed link is all it takes to minimize duplicated content and maximize link equity when linking between pages in DNN.

As always, I’d like to hear from you. Do you consider LinkClick.aspx your friend or foe? What other duplicate content issues have you run into in your daily DotNetNuke adventures?




Comments

John Mitchell John Mitchell says:

I totally agree that LinkClick is not good for SEO.

The thing I don't like is that letting your links go through LinkClick creates a 302 redirect to the actual page that it is going to. Direct links are much better, especially if you format them properly with a title attribute and "keyword rich" link text.

peter schotman peter schotman says:

Thanks for this article Tom. I think LinkClick is a necessary evil w.r.t. "protected" content. However, I guess in 99% of the cases, the links are just links, which should be well formed for search engines. The question thus becomes: How can linkClick be implemented better, so that it generated "friendly" links?
Peter

Mitchel Sellers Mitchel Sellers says:

Tom,

Another great blog post here. As the person above mentioned LinkClick.aspx is an item that we need, the key here is that we ONLY need it when working with protected content.

One thing I would like to see the core do is add an option in FCK that gives you a "link to page" option. Just another popup that lists all pages, once you select a page it calls the friendly URL provider to get the proper link to the page. I am not sure how to implement in FCK, but I could create a page that listed the proper URL's in the matter of 30 minutes.....

Tom Kraak Tom Kraak says:

John - I did not even realize that it returns a 302, which adds even more salt to the wound. That potentially means that LinkClick.aspx?link=xx&tabid=xx URLs will end up in SE indexes. Exactly what you don't want.

Peter & Mitch - yes, that's the big question. In all my time working with DNN I never had to protect anything though ... LinkClick is meant to obfuscate certain content?

John Mitchell John Mitchell says:

I don't think it can be implemented any differently for doing the LinkTracking, and file protecting that it is meant for. It actually checks security of the user for access to files if it is pointed at a file.

There just needs to be an alternative for regular Url building like Mitchel mentioned.

John Mitchell John Mitchell says:

By the way, try out this search in Google to see how prolific this little gem is:

Search for LinkClick Urls

Tom Kraak Tom Kraak says:

So we need to distinguish between linking to files vs linking to pages.

Right now it's handled by one and the same control.

Tom Kraak Tom Kraak says:

That's too funny!

Using John's Google query above, dotnetnuke.com's own DotNetNuke > Products > Development > Roadmap > URL Abstraction page is index via a LinkClick.aspx URL.

Dotnetnuke Modules Dotnetnuke Modules says:

We use Teleriks Editor for exactly this reason. You can force it to use tabid in the url which prevents it from forming the type of url's from your example. Do you know if this is an issue we can expect will be resolved in future issues?

Tom Kraak Tom Kraak says:

First Mr. Mexmax, all comment links are nofollowed, so go ahead ... use your name.

Second, how do you force the Telerik editor to use friendly Urls? I know that you can specify custom nodes in ToolsFile.xml, but that's a manual process.

Mr. MexMax Mr. MexMax says:

Regarding not using my name, well that has nothing to do with follow or no follow. I just think somebody interested in our services would be more inclined to click on a link saying: Dotnetnuke modules than my name. But that aside, to answer your question.
You can use LinksUseTabNames="false" to force Teleriks Editor to format the url in the form of www.yourwebsite.com/TabID/12/default.aspx in stead of www.yourwebsite.com?tabname=yourtab
Hope this helps.

Déclic Vidéo FX Déclic Vidéo FX says:

Hello Tom,

This blog is perfect. But what about the bi-lingual website... Too often, we are lost or ignored. And Bi-lingual website is a problem, because if you use for example Friendly URL (Ventrian) with DNN 4.5.5, you are penalised because of same URL pointing to different content (english and french). That's why I am now using iFinity URLMaster which has solved this problem !!! By creating 301 redirect and adding language parameter inside the URL.
I am preparing a small explanation for building the perfect bi-lingual website (on my DNN page http://declic-video-fx.com/language/en-US/DNN.aspx)

By the way, how do you do to avoid comments to be followed by spider ? I am interested for my website !!

DV FX

Tom Kraak Tom Kraak says:

Thanks for the tip MexMax. Where exactly does LinksUseTabNames="false" go though? Into ToolsFile.xml or ConfigFile.xml? And into what section?


DV - I agree, not much attention is given to DNN ML sites in general. I'm guilty of it myself. Hopefully that will change once DNN fully supports content localization.

You did a great job with your DNN guide ... how come I did not know about that resource ... you just put it up?

Add rel="nofollow" to your NA Comments template.

Mr. MexMax Mr. MexMax says:

Hello Tom,

You can put it in the configfile.xml or add it to your web.config in the htmleditor definition. If you need any help let me know.

Tom Kraak Tom Kraak says:

That did it ... thanks again.

Etienne Richard Etienne Richard says:

Didn't know LinkClick.aspx served also to protect content, thanks for the info.

In order to disable the LinkClick functionality in the Fck Editor, the only way is to modify/recompile the provider (FCKLinkGallery.cmdSelect_Click) or, if we want to apply this behavior globally, modify DotNetNuke.dll (Globals.LinkClick method).

I think LinkClick should be more pluggable than its current implementation. For instance, I would rather track clicks using Google Analytics than the built-in tracking system, but there is currently no way to implement this other than recompiling the core LinkClick method. And even there, I would need to modify the actual link, not only its href, so this is problematic.

And there are some more usability issues when it comes to link and text editing inside DNN. With LinkClick disabled, the url returned from the Fck LinkGallery would look like: /Products/MyProduct/tabid/87/Default.aspx. That is what would get saved into the HTML content. Suppose we move this page under /Archive/. The first link doesn't get updated and still points to root /Products/. The old link will still work fine (since the only important part for DNN is the tabid), but it won't have the correct path to it (/Products rather than /Archive), which can lead to incorrect analysis of the site's structure by spiders.

It would be interesting to save the information of the link itself, rather than the actual implementation of the link. For instance, we could use a custom friendly url provider which returns [@TABLINK:87] rather than the actual link. Combined with a HttpModule that would dynamically search and replace tagged links with actual links at runtime, we would then have truly dynamic links.

How does the idea sound?

Antony Antony says:

Salut la gagn !
I've traduced my website few moth ago and added friendly URL and since my ALEXA ranking went down like it never did before. ML just hurt me and I tought it would help :( !!! I'm not any kind of programer and I'm not sure I understand all those posts, but I do my internal links with standard DNN HTML editor with a copy of my link, Hope I'm not killing myself.. I someone could just tell me if i'm on the right track ??

Thanks everybody, Merci à tous !
http:www.tunersdream.com

Antony

Tom Kraak Tom Kraak says:

Antony - your "new" URL rewrite provider does NOT take care of 301 redirecting your old-style URLs to the new-style URLs, which is why your Alexa ranking as been suffering.

David Ascot David Ascot says:

That’s great, I never thought about Minimize Duplicate Content by Avoiding DNN's LinkClick.aspx like that before.

Trouble2 Trouble2 says:

Anyway, it doesn't seem to be picked up by the core yet.
I know enough people who really HATE linkclick.
So the least they could do is make it optional.

Name (required)

Email (will not be published) (required)

Website

Enter the code shown above:

Subscribe to our Feeds Follow on Twitter