Pump Up Your Website With These 25 No-Brainers

<span class="drop_cap">T</span>Whether you’re new to online marketing or a seasoned veteran, it sure is nice to see what others consider important when setting up or taking over the online marketing for a business and its website.

Below is my Top 25 list of things to do from Day One.

It’s a simple list and knocking them out is not really that hard after you’ve done each once.  So don’t let it intimidate you.

Start with the simple ones and move from there!

  1. Implement Web Analytics!
  2. Setup Google Webmaster Tools
  3. Setup Google Webmaster Tools for www and non-www
  4. Track 404 Errors – Pages Not Found
  5. Create 301 Redirects for pages not found
  6. Exclude yourself from Web Analytics (Google Analytics, Adobe Omniture SiteCatalyst, etc.)
  7. Create a mobile version of your site using MobiSiteGalore
  8. Test your page load times using Page Speed
  9. Create HTML, XML and geo sitemaps
  10. Archive your website using SurfOffline
  11. Audit broken outbound links  using Xenu Link Sleuth
  12. Use a trackable phone number
  13. Create robots.txt
  14. Implement Hcard
  15. Redirect non-ww to www
  16. Redirect index.html to /
  17. Claim your business on Google Places
  18. Create a favicon.ico for your website
  19. Confirm your website’s IP address is not blacklisted
  20. Add alt tags to your website images
  21. Validate the HTML used on your website
  22. Claim your business on Yelp.com, CitySearch.com and JudysBook.com
  23. Set up Google Alerts
  24. Validate Browser compatibility
  25. Set up site search within Google Alerts
  26. Set up a globally recognized avatar (gravatar)

My list is actually much longer than this, but these are my top 25.

Do you think they’re right?
What did I leave off?

Tell me in the comments below.

Dead End Page – How To Track Error 404 – Page Not Found

Dead End - Page Not FoundLanding on a website and getting a 404-Page Not Found error is frustrating.  But owning the website with those errors can mean lost money.  If you’re not already tracking these errors, here’s your primer to start today.

If you’re here to implement 404 Page Not Found tracking and know why you need it, you can skip this first section.  If not, I’ll cut to the chase.  Tracking when your website visitors request a page that doesn’t exist has many advantages.  To do this is not just a nice feature to implement, it’s a requirement.  The downside to this is a very poor user experience.

  1. You may have links into your website from other sites that you aren’t aware of.  Those links may be pointing to non-existent pages on your website.  This has two major downsides:
    • Visitors hate 404 – Page Not Found errors.  They typically bail on the site rather than work to find out the real page they were meant to land on.
    • Search engines can’t pass any of their link love from the other site to yours.  Losing that love is a tragedy.
  2. The tactic of creating a custom 404 page is good business.  It forces you to consider the scenario and how you would like to be perceived should someone land on a dead page on your site.

The Code

Common Code

Regardless of your vendor you will need to either locate the current 404 page on your webserver or create one if one doesn’t exist.  This is where you’ll be creative and really consider the user experience with humor, information (sitemaps?) or redirects.

On this custom 404 page you will tag it like all of your other webpages with the following exceptions.  One for Google Analytics and for (Adobe) Omniture’s SiteCatalyst.

Google Analytics

For Google there are two tagging versions you can consider depending where you are in your timeline of migrating from their synchronous versions to their latest asynchronous version.

Note that as of this writing I personally have run into a significant problem with the asynch code and have rolled it back until it can be addressed by Google.

The code snippets below are your typical code snippets provided by Google Analytics with the addition of detailed trackPageview parameters.  These parameters allow your reporting to expose which page the visitors were trying to reach and where they came from.  See Google’s explanation of 404 tracking.

Old School: Synchronous code
var gaJsHost = (("https:" == document.location.protocol) ? " https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + " google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


try{
var pageTracker = _gat._getTracker("UA-xxxxx-x");
pageTracker._trackPageview("/404.html?page=" + document.location.pathname + document.location.search + "&from=" + document.referrer);
} catch(err) {}
New school: Asynchronous code
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview', '/404.html?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

Regardless of which version of code snippet you use, your reports will look similar to this.

Sample Resulting Report

google analytics 404 error pages not found report

Google Analytics Report - Click To Enlarge

The simplest way to view these reports is to create an advanced segment that sets the Page as containing “/404.html”, or whatever your custom 404 page URL begins with.  Make sure it is qualified as “contains” and not “matches exactly” or anything else.

After applying this advanced segment go to “Content-Top Landing Pages”, from there you’ll be able to see a report detailing each instance of the 404 error along with the intended destination page and the site the inbound link came from.

Omniture

sample code

s.pageName=""
s.pageType="errorPage"

Do not set the s.pageName variable on this page!

From (Adobe) Omniture’s SiteCatalyst v14 Implementation Manual

SiteCatalyst pageType Implementation

SiteCatalyst pageType - Click To Enlarge

2.1.44 pageType

The pageType variable is used only to designate a 404 Page Not Found Error Page. It only has one possible value, which is “errorPage.” On a 404 Error Page, the pageName variable should not be populated.

Table: pageType Variable Parameters

The pageType variable captures the errant URL when a 404 Error Page is displayed, which allows you to quickly find broken links and paths that are no longer valid on the custom site. Set up the pageType variable on the error page exactly as shown below. Do not use the page name variable on 404 error pages. The pageType variable is only used for the 404 Error Page.

! NOTE: In most cases, the 404 Error Page is a static page that is hard-coded. In these cases, it is important that the reference to the .JS file is set to an appropriate global or relative path/directory.

Syntax and Possible Values

The only allowable value of pageType is “errorPage" as shown below.

s.pageType="errorPage"

Examples

s.pageType="errorPage"

SiteCatalyst Configuration Settings

None

Pitfalls, Questions and Tips

To capture other server-side errors (like 500 errors), use a prop to capture the error message and put “500 Error:

<URL>” where <URL> is the URL requested, in the pageName variable. By following this course of action, you can use Pathing Reports to see what paths caused users to generate 500 errors, and the prop will explain which error message is given by the server.
omniture sitecatalyst pages not found report

Omniture SiteCatalyst Report - Click To Enlarge

Tracking 404 Error Pages Improves Visitor Experience

This tactic has proven invaluable to me and my clients.  Over time we notice the number of visits to the custom 404 page go down because we create custom 301 redirects for each bad inbound link and redirect to the most appropriate page on the site.  This regular maintenance slowly firms up your website and in the end creates a better visitor experience.

How do you exclude yourself from Google Analytics or Omniture SiteCatalyst?

Google Analytics Exclude YourselfLast year I blogged on excluding yourself from web analytics reporting.  In particular, I dove into how to manage large numbers of IP addresses in your exclude filters for Google Analytics.  But the landscape has changed since then.  Now the methods need to be tweaked and there are some gotchas worth sharing on how to exclude yourself.

Background

Depending on the size of your company, or more importantly the visitorship of your websites, the impact of internal visitors to your reporting could be huge and misleading.

Even for some of my tiny sites where I’m looking for traction in the early stages of life, I don’t want my footprints to be muddying up my web analytics.

Fortunately most web analytics packages allow you to remove, or at least hide, yourself and your visits.

When I refer to “my footprints” I’m really talking about me, my company, my client’s staff maybe even vendors.  Anyone that would be considered “internal traffic”.

Methods

The two most common methods for excluding yourself from your web analytics reports are: cookie-based and IP/domain exclusion.  There are pros and cons to each and that’s why Google Analytics and Omniture’s SiteCatalyst leave the decision up to you by providing you both options.

Cookie-based Exclusion

  • PROS:
    • For mobile computers or computers that regularly connect via dynamic IP addresses, this is the only method that works.
    • If there are devices on the same IP (not internal IP, but rather Internet-facing IP) as you then again you have to use cookies
  • CONS:
    • If your machine or software regularly deletes cookies (browsers can be configured to do this on closing) then you will need to continually re-add the cookies
    • Once a visit has been excluded via cookies, they cannot be retrieved.

IP/domain Exclusion

(Domain names just resolve to an IP address so they are lumped together for this purpose)

  • PROS:
    • If you do not have the ability to place cookies on the target devices (too many or remote) then you will have to exclude them via IP addresses or domains
    • You can use the filter on some profiles and not others. This allows you to have some reports with internal traffic excluded and others with the internal visitors included.
  • CONS:
    • You may not be able to inventory each and every one of your IP addresses, therefore leaving you open for contaminated web analytics reports.

Current Techniques

For Google Analytics, you need to go to your setup view and click on “Filter Manager >>”

Google Analytics Filter Manager

Google Analytics Filter Manager - Click To Enlarge

From there click on “Add Filter”

Google Analytics Add Filter

Google Analytics Add Filter - Click To Enlarge

GOOGLE ANALYTICS – IP/DOMAIN EXCLUSION

There you will name the filter “Home Router” or “Corporate Office IP”, choose “Predefined Filter” and choose to either exclude based on IP address or domain.  It’s that simple.

Google Analytics Filter Types

Google Analytics Filter Types - Click To Enlarge

If you need to exclude many IP addresses, you need to dive into regular expressions which then lead you to the 225 character maximum and custom filters.  It’s not hard, but it’s also not 5 minutes of work.  I’ve built custom filter lists numbering over 30, encompassing over 200 IP addresses.  Fun times!

GOOGLE ANALYTICS – COOKIE EXCLUSION

Here you’ll need a custom filter that Google has done a great job of explaining it in detail.

Google Analytics Cookie Filter

Google Analytics Cookie Filter - Click To Enlarge

Note the code needed on the exclude.html page had been updated with the latest asynchronous Google tracking code snippet.  Here’s the HTML code from a site that I have not yet upgraded to the latest code version.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exclude Me</title>
</head>
<body onLoad="javascript:pageTracker._setVar('test_value');">
<p>This computer now has a cookie placed on it to exclude it from any Google Analytics reports.</p>
<p>If you delete your cookies, you will need to revisit/reload this page again.</p>

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


try {
var pageTracker = _gat._getTracker("UA-1111111-11");
pageTracker._trackPageview();
} catch(err) {}
</body>
</html>

Update: Here’s how the code should look using the new asynchronous tag.  Note, I haven’t actually implemented this yet, but it’s pretty straightforward.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exclude Me</title>
</head>
<body onLoad="javascript:pageTracker._setVar('test_value');">
<p>This computer now has a cookie placed on it to exclude it from any Google Analytics reports.</p>
<p>If you delete your cookies, you will need to revisit/reload this page again.</p>

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1111111-11']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();


</body>
</html>

With Omniture’s SiteCatalyst, there may (and should) be a quicker way (please comment if you know it), but I manage it by logging in and going straight to “Exclude by IP”

Omniture SiteCatalyst Exclude by IP

Omniture SiteCatalyst Exclude by IP - Click To Enlarge

OMNITURE SITECATALYST – IP/DOMAIN EXCLUSION

Here you’ll be able to add IP addresses one by one to your report suites.

Omniture SiteCatalyst IP Exclusion

Omniture SiteCatalyst IP Exclusion - Click To Enlarge

Two limitations: I don’t know of a way to add a domain exclusion, and if you want to exclude a large number of IP addresses, my Omniture account manager told me it would involve their professional services team ($$$).  I’ll have that need soon and I’m too stubborn to pay for something that should be free.

OMNITURE SITECATALYST – COOKIE EXCLUSION

To enable cookie exclusion, on that same “Exclude by IP” you will see a very well-hidden link title “click here” (brilliant label) that will take your cookie “jar”.

Omniture SiteCatalyst Cookie Exclusion Option

Omniture SiteCatalyst Cookie Exclusion Option - Click To Enlarge

Here you’ll either see a button that says “Exclude” (your computer is not yet excluded and needs to have a cookie placed on it) or “Reactivate” (your computer already has the needed cookie placed on it).

Interesting!  When I went to take my screenshot I ran into an error.  I tried multiple browsers, report suites and computers.  For now you’ll need to trust me the button usually exists where “undefined” is below.

Omniture SiteCatalyst Cookie Exclusion Error

Omniture SiteCatalyst Cookie Exclusion Error - Click To Enlarge

A very big downside of Omniture cookie exclusion implementation is that you must log on to SiteCatalyst to place the cookie.  So you can’t have non-users just visit a page that places the cookie on their machine.  You have to either grant them access or log in yourself from their machine.

Gotchas

  1. Beware of automatic cookie deletions.
  2. Dynamic IP addresses, ISP changes and location growth can quickly invalidate your filters.
  3. Creating new profiles (Google Analytics) or report suites (SiteCatalyst) requires you to apply your chosen exclusion technique to them.  It will not occur automatically.

I hope this helps explain the two exclusion methods, two web analytics vendors’ implementation of those methods and a few of the hazards to avoid when implementing them.

Please leave comments if this was helpful (or not)!

Twitter Referrals and Web Analytics – A Broken Referral Link

Broken Twitter Referral Link

If you are obsessed about your web analytics or your customer’s web analytics as I am, then you may have noticed a problem where Twitter referral traffic is being recorded as direct entry traffic rather than referral traffic.

Don’t mess with my numbers, man!

I work hard to keep my numbers clean.  I do it for my sites, my employer’s sites and my customer’s sites.  Without this anal retentive attitude you cannot make higher level business decisions.  The supporting data is flawed so your assumptions are broken.

But that’s a rant for another day.  Just suffice it say that you need to constantly test your data to make sure it’s legit.


Who Can I Blame?

Web Analytics Referrals From Twitter

Here’s the problem in a nutshell. When you click from one web page to another the browser usually passes referral data to the receiving page.  That data is then recorded by your web analytics program so you can report on where your visitors arrive from.

In Google Analytics they break it down into 3 buckets initially, Direct, Search and Referral.  Now, if I tweet this blog post’s URL through Twitter, I want those click-throughs back to the site to be recorded as referrals from Twitter. Likewise when others retweet me I want them to also be recorded as referrals, not direct entries.

But the Twitter model has introduced a new presentation screen different from browsers.  HootSuite and TweetDeck are popular applications used to “dashboard” Twitter activity (along with Facebook and LinkedIn).  These applications and their tight relationship to URL shorteners, do not always pass the referral data (needed by web analytics tools) you would normally see if they had come from the twitter.com domain via a browser.

If you want the down and dirty details behind it visit Danny Sullivan’s forensic work on it.


Make The Numbers Match!

Connecting Twitter Visitors In Web Analytics

Fine.  It’s a problem.  But you need to solve it, right?

Again in a nutshell: force the referral information to be preserved as visitors click through Twitter to your website.  This is done with link tagging.

  • Using Google Analytics, we can go to their URL builder and force-tag our link before we put it into our tweet.
    • Of course that gets really painful if you tweet more than once a week.  So check out Snip-N-Tag for an inline method of adding link tagging for Google Analytics.  Pain relieved!
  • Using Omniture’s SiteCatalyst, you can create a campaign in your report suite for all of your Twitter postings.  Then append the campaign id (e.g. s_cid) to every one of your tweets.  You’ll also need to further manipulate some of your variables to ensure they’re attributed to referral traffic, but that’s beyond this post.

I always try to include link tagging on every link I place out there.  Even ones that are not destined for one of my sites.  Nothing speaks to an analytics guy or gal more than looking in their report and seeing your traffic to their site jumping off the screen with campaigns names.

I should really share that treat here!  Next week.

Don’t Count Yourself – Exclude your company from your analytical reports

No matter what the size of your company, your (and your co-workers) can have a significant impact on your analytics data.

Depending on the purpose of your website, internal visitors may or may be interesting to track.  If internal visitors are treated equally to exxternal visitors, then stop reading now.  Your analytical tool likely have you covered by default.

But if you don’t want to see your internal traffic on your reports, then keep reading.

There are three primary methods to exlude this traffic:

  1. Place a cookie on the to-be-excluded machine.
  2. Identify which domain name you want to exclude.
  3. Identify which IP address you want to exclude.

For Google Aanlytics, they have done a great job explaining the necessary steps.

For Omniture’s SiteCatalyst, go to “Admin” and choose “Exclude by IP”.  From there you can enter the necessary IP addresses as well as look for a link that takes you to the page where you can place a cookie on you machine.  Hint: The link is hidden in the Overview paragraph.

Here one trick you may need.  If you need to exclude multiple IP addresses from your Google Analytics account it could be very daunting to type them and apply them to many different profiles.  Note: I have not found a similar trick for SiteCatalyst yet.  Also note that if your IP addresses are adjacent to each other in number sequence, you can use wildcards more easily.  This is for distinct IP that are not remotely similar to one another.

Within your Google Analytics account, click on the Filter Manager option at the bottom.  Then choose “Add Filter”.  Name your filter “abc.com ip range 1”, Predefined Filter,  Exclude, “traffic from the IP addresses” and Match.

In the IP address field you will type in a regular expression.  So if you wanted to exclude 2 IP address with one filter, 2.2.2.2 and 3.3.3.3, you would type in:

^2.2.2.2|3.3.3.3$

You can continue to add your IP address until you reach the 255 character limit.  In my experience it safest to limit this to 10-12.  To create this long regular expression, use Excel with the CONCATENATE formula.  So you may need multiple filters depending upon how many addresses you need to exclude.

Now if you have just applied this filter to one of your profiles.  If you need to apply it many more, just go into Filter Manager, edit the filter and apply it to each appropriate profile.

Hope this helps.  Let me know how it goes.

Bookmark and Share

Are You Tracking Your Broken Inbound Links? Your 404 Pages Not Found?

I see this happening all of the time with company sites.  Not only do they have no handling of “404 page not found”, if they do handle it there is no tracking of what page the visitor was trying to reach.

So let’s think about this.  Someone has come to your site through a bad link and here’s the results.

  1. They get peeved by the bad link and abandon your site.  You just lost money.
  2. You even don’t know they came and went.
  3. You don’t know where the bad link is out on the web.  So you can’t fix it.

Now here are the solutions:

  1. Oh Snap!  Create a custom 404 page according to some best practices out there.  Each time I do this I look up great examples and borrow their ideas.
  2. Track hits to your 404 page.  This will show you which pages are not being found as well as show you where the links are coming from.  Have these reports sent to you on a daily basis.  Else you lose more traffic.
    • Google Analytics has a simple addition to the JavaScript tracking code on the 404 page.
    • Omniture SiteCatalyst: in the code of your 404 page, leave s.pageName=”” blank and set s.pageType=”errorPage”.  This will create a custom entry into your “Pages Not Found” report in SiteCatalyst.
  3. Once you know which pages are being requested but not found, create a 301 redirect to the closest matching page you have.  Don’t give them options if you know where they should be going.  If you’re not sure where they should go (you are the webmaster, aren’t you?), then send them to a tables of contents page.  Not the sitemap.html or sitemap.xml page, but rather a page with a few targeted pages that will help them decided.
  4. Contact the owner of the inbound links and fix the problem.  Sometimes it’s as simple as claiming your business on a review page, other times it’s going to be harder because they’re in someone’s blog comments.  At least you’ll have the 301 to back you up.

Don’t be blind to this visitor loss.  Everyone has bad inbound links.  Fix yours or lose money.

Bookmark and Share

Google Analytics and tagging your inbound links/campaigns

If you’re using Google Analytics, or any other web analytics tool, you must start now to tag your inbound links/campaigns so you can track their effectiveness.

Visit Google’s tagging page for details on how to use utm_source, utm_medium and utm_campaign, the three required parameters that make up campaign tracking.

Omniture’s SiteCatalyst has an even more extensive implementation of this through their default s_cid parameter that allows you to correlate campaigns across more dimensions than Google.  But no matter who you use, start using it now.

I’ve placed campaign tracking tags on my LinkedIn profile and even on the signature of my outbound emails.  You would be surprised how many people click on those links to learn more about you and your company.

A word of caution, I have found at least one place where you cannot place these campaign tracking tags, Google Local Business Center.  Surprisingly, the addition of the three utm_ tags above threw one of my customer’s listings into Flagged’ state for over a week.  That state supposedly sends it to Google for review.  After a week I couldn’t justify not having my customer listed in Google’s local search any more so I removed the tags.

Bookmark and Share