Celebrity Website SEO Audit

Celebrity Website Audit Yesterday I was following (“participating” would be too much for someone who doesn’t say a word, right?) the Celebrity Website SEO Audit, a Google Hangout organized by Dejan SEO.

I don’t know if it was the spam attack to Spamhaus, a too slow internet connection here in Malta or just that sometimes I’m not very patient, but after about 10/15 minutes I decided to give up trying to follow the SEO audit.

However, in the few minutes I followed, I could get a bit of what I was actually trying to get, which is, basically, how other SEOs would conduct a quick SEO audit, what they would look for first, and so. Because it’s always good to compare your way to do things with others.

And what I could see is that there are not big differences. I didn’t expect to find them, but you never know.

However, to apologize with Dan and all the others, I would like to point out 3 issues I found on LadyGaga.com, the first website audited yesterday. I apologize again if any of these issues has been already pointed out yesterday, but again I had 5 minutes of connection problems, and then quit, so I might have missed it.

  • The first issue I saw is the link on the logo, which links to /Default.aspx instead of /. There’s not even a rel=”canonical” saying search engines / and Default.aspx are the same. Yes, I know: if you search for the Default.aspx page, you don’t find it on Google, so one might ask why bother?  Mmm
  • Performance can be improved, just by adding a max-age or expires headers to a lot of static content or by combining CSS and javascript files.
  • All the events could use Event Schema

These are my 2 cents. Hopefully, next time I will be able to properly participate, also because SEO audits are something I really like to do.

Redirect 301 for everyone but you

Consider this post just a quick note to myself, because I will surely need this again in the future.

Scenario: i have a production server and a development server. As you can easily guess, on the production server i have the live version of the websites and on the development server I develop new features/bug fixes/new websites.

What I usually do is to create a specific subdomain for the development. Sometimes i add that hostname as DNS record, sometimes i just add it to my hosts file. Either way, it’s still possible for others to find your “hidden” development website (for example, Alexa.com displays the subdomains getting traffic, so if you use the Alexa toolbar – not necessarily the official – you will see your development website listed under your domain statistics on Alexa.com).

The solution to the problem is extremely simple: just redirect to the production website the traffic coming from any IP address but yours. Just add to the .htaccess of the development website these lines:

RewriteEngine On
# If it’s not your IP address
RewriteCond %{REMOTE_ADDR} !^$
# Redirect everything to production host.
RewriteRule ^(.*)$ http://www.stefanogorgoni.com/$1 [R=301,L]

Change of course that to your IP address (if you have a dynamic IP, don’t forget to change the .htaccess accordingly every time the IP changes), and the hostname of destination (the www.stefanogorgoni.com part).


Link building in the gambling industry

After the Penguin update, the SEO community talked a lot about unnatural links. Most of the times, the links that look unnatural are also purchased links.

This is true because SEOs focused so much on the anchor text of the links they could get from other websites they forgot one of the great rules of SEO: if you are making something unnatural, make it look natural.

The panic is at such levels that many SEOs started contacting the link vendors to ask them to shut down the links.

Ah, if only all those SEOs didn’t spend time forcing things that much… But ok, not everybody is meant to be a great SEO…

So, penalization after penalization, people is learning the importance of getting links with the most stupid anchor texts… Better late than never!

But is Google really penalizing every website buying links? Clearly no! First of all, it would be absolutely impossible for Google to know, for every link, which link is purchased and which link is spontaneous. They can just guess.

I work in a weird industry: gambling. Gambling is usually considered a very competitive niche. Yes, it is, but SEO in this industry is also really primitive. So, i wouldn’t say it’s that competitive! In the short term, sure it is… But basically every website is violating Google’s guidelines, so it’s reasonable to expect that one day they will be just wiped out.

If someone today wants to work purely in white hat mode, they won’t rank in short term, but they might be one of the best websites in the long term.

It’s funny, however, one aspect of the story: many of the online casinos buy unnecessary links. They just have a big budget and they buy all they can get.

SEO in the gambling is hard? Well, most of the times, a SEO in this industry just contact/is contacted, ask for a price, get quotes for every website (quote that varies depending on Pagerank! In 2012!), and choose a anchor text and a destination page to link to. Hard work!

This is the very competitive SEO in the gambling industry!


Even those companies that say “we don’t do that, come on” work this way. An example? This is just a little piece taken from a job description from one of the biggest betting companies when it was looking for a SEO Manager more than a year ago:

Would you expect to receive an offer of 10€ for a post with two backlinks from the same company? Well, what can i say… they don’t buy links. They beg for them!

But… is there any other way to acquire links, for a gambling website? I mean, apart from buying or exchanging links, what else a SEO working in this industry can do? It’s not all our fault. After all, who would naturally link a gaming website?

50% of webmasters wouldn’t do it at any cost; the other 50% would do it only for money. So, there’s no room for free links in this industry.

Unless you are creative. Unless you do something worth a link. Unless you deserve it.

But even doing so, you are still fighting against competitors that spend many thousands of dollars in links. If Google decided (and actually could) to ban all the websites buying links, today we’d likely have this SERP when searching for online casino:

SERP for the keyword "online casino" if Google banned websites that buy links

(click on the pic)


The irrational fear of high bounce rate

Watching a video from a Whiteboard Friday on SEOmoz, 10 Myths That Scare SEOs But Shouldn’t, i got stuck for a bit on the 5th myth listed by Rand about a high bounce rate.

Because yes, many SEOs are really afraid of that, they are afraid that Google can see that data and use it against the website.

The point is: this makes no sense. Users search for an information on search engines, they click on a result, they find the answer… and they leave. Happy.

What’s wrong with this behavior? Nothing! Why should a SEO be worried about the bounce rate then? No reason.

Rand correctly uses the example of a Q&A website. I go further: if you go on Google, search for something, and leave Google without coming back for more results, doesn’t it mean Google actually provided you with a good result?

Ok, technically speaking, searching for a key-phrase and clicking on a result doesn’t increase a bounce rate, since you are visiting two pages, not just one. But still, the time spent on Google is short. The shorter, the better.

You should be worry about the short time spent on your website for other reasons, maybe. But that data, out of context, means nothing. So, don’t panic.

Get domain from URL

How to get the domain from the URL? It depends!

Lately i’ve spent some time trying to figure out the best way to solve this problem.

Scenario: a website reachable through two different second-level domains (and a bunch of third-level domains). No redirects from a domain to the other, or from the third-level domains to the second-level (and this behaviour couldn’t be changed). The two SLD have their own virtual host configured on Apache (this detail is very important, as you will see).

Please note: the following possible solutions consider PHP, but i guess that, apart from the different syntax, the logic would be the same with any other language). I’m not a programmer anyway, so won’t put much code here (feel free to add it in the comments, if you want).

One possible solution is to get the server name:


and then take the last two strings starting (separated by a dot) from the end.

So, if SERVER_NAME is www.mydomain.tld, you would get mydomain.tld, which is the second level domain.

This solution can be good enough if you know in advance you are not going to use it with domains including a dot, like co.uk, com.mt or com.au, just to name a few.

But if you have the website accessible through google.com and google.co.uk (the first example coming to my mind, i wonder why), this kind of solution would return google.com and co.uk. Not exactly what you’d want.

A more sophisticated solution would be to check the TLD against a list (there is one here but it’s not complete). If you have a complete list of TLD, you can get the SERVER_NAME, check what TLD is in it, and pick up the part of the hostname before the TLD (plus the TLD itself, of course).

For both the solutions above, you can find a lot of code snippets on Google.

But my favourite solution is the third! In fact, you can set in the virtual host (in the two virtual hosts, in my case) on Apache a variable defining the domain:

ServerName www.domain1.tld
SetEnv MY_DOMAIN domain1.tld

ServerName www.domain2.tld
SetEnv MY_DOMAIN domain2.tld

This way it’s Apache defining the exact domain value, and at this point you can get the variable in php with a simple


For the record, i needed to use the variable to create a cookie valid for the second level domain and any subdomain of it. So, once defined the variable in the virtualhost, all i had to do was something like this:

$domain = $_SERVER[‘MY_DOMAIN’];
if(isset($_GET[‘parameter’])) {
$variable = htmlentities($_GET[‘parameter’]);
setcookie(“mycookie”, $variable, time()+(60*60*24*7), “/”, $domain);

In case you will find yourself in the same situation, hope this saves you some time.

P.s. as you see now, being able to edit the virtual host is essential to use this solution.

WordPress and XML sitemaps plugins

If you have a WordPress with multisite feature enabled, you may have experienced problems in finding the right plugin to generate a XML sitemap to submit to search engines.

I usually use Google XML Sitemaps, maybe the most used plugins to generate XML sitemaps on WordPress. Unfortunately, this nice plugin doesn’t work on WP Multisite. And it doesn’t generate multiple sitemaps.

If you want a XML sitemap plugin to generate sitemaps on your multisite wordpress, you want try WordPress SEO by Yoast, as far as i know the only plugin that works well in generating a sitemap on a WP multisite website.

But if you have a huge website, with thousands and thousands of URLs in it, you may have another kind of issue. In fact, none of the above mentioned plugins generate multiple sitemaps (and the sitemap index, of course) in case you have more than 50.000 URLs to list. And by the way, 50.000 is the limit in the protocol, but Google seems not to love sitemaps with more than 10.000 URLs listed. If you have this issue, you should try Strictly Google Sitemap, a plugin that allows to generate multiple sitemaps (and with great performances!). Only problem i found out using this plugin is that the permalink structure must include some numeric value (%post_id%, for example), or the sitemap generated won’t be correct.

And if you have a WP multisite with some of the websites in the network with more than 50.000 (or just 10.000) URLs? I’m afraid we have to wait for it: i couldn’t find any.

Pidgin cannot connect to MSN: the certificate chain presented is invalid

The certificate for omega.contacts.msn.com could not be validated. The certificate chain presented is invalid.

If you have an error when trying to connect to MSN messenger with your pidgin today, this is the easy and quick way to fix the problem: just delete the contacts.msn.com SSL certificate.

rm ~.purple/certificates/x509/tls_peers/contacts.msn.com

This way, pidgin will download again the SSL certificate and everything will be working again.

update: check comments for more other possible fixes

WordPress, Feedburner and sitemaps

UPDATE (19/03/2011): it seems the last version of the plugin already takes care of Googlebot, so this post has to be considered outdated.

If you use Feedburner for your wordpress feed, you probably use the FD Feedburner plugin for WordPress . The plugin is cool because it redirects your users to your Feedburner while letting Feedburner itself accessing your wordpress feed; and it’s really simple to configure.

But if you want to submit your feed to Google Webmaster Tools, Google will be redirected to your Feedburner too. While you may expect it to work, in some case it won’t. If you track clicks on Feedburner in fact, your feed will have changed links in it. Feedburner changes the <link>URL</link> to an internal URL that will redirect to your own URL after tracking stuff.

As a consequence, if you submit your feed as a sitemap on Google Webmaster Tools, Google will show you errors like this:

Feedburner and Google sitemap

This happens because the URLs in the Feedburner feed are not into your own domain but on http://feedproxy.google.com/

To fix this behaviour, easiest solution is having Google accessing your original feed (http://yourblog.tld/feed/) instead of being redirect to Feedburner. This can be easily done with a little change in the plugin.

Edit your plugin (with a text editor accessing the file via ftp, or just from the dashboard -> Plugins -> Editor, and select the FD Feedburner plugin) and look for this piece of code:

function feedburner_redirect() {
global $feed, $withcomments, $wp, $wpdb, $wp_version, $wp_db_version;

// Do nothing if not a feed
if (!is_feed()) return;

// Do nothing if feedburner is the user-agent
if (preg_match(‘/feedburner/i’, $_SERVER[‘HTTP_USER_AGENT’])) return;

// Do nothing if not configured
$options = get_option(‘fd_feedburner’);
if (!isset($options[‘feedburner_url’])) $options[‘feedburner_url’] = null;

Just change the line

if (preg_match(‘/feedburner/i’, $_SERVER[‘HTTP_USER_AGENT’])) return;


if (preg_match(‘/(feedburner|google)/i’, $_SERVER[‘HTTP_USER_AGENT’])) return;

and you are done. Google won’t be redirected to your Feedburner feed, and it will use your original feed as sitemap.

Nice try

Derek Powazek – Spammers, Evildoers, and Opportunists. This is a kind of link baiting tactic i don’t like too much: the attack hook.

This is why, for once, i’m using a nofollow attribute.


Moving a website to a new hosting, i had the problem of importing the database. In fact, export was too much big (30Mb) compared to allowed size of upload files via phpmyadmin on new hosting (1Mb – where “M” maybe stands for “miserable”). Of course, no shell access…

So? Fortunately, i found BigDump, a GPL script that allows to import into the new database the exported file. Excellent!

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.