Netflix’ SEO Problems on Google and What You Can Learn From Them

Juan Gonzalez
.I studied Regional Studies of Latin American at the University of Cologne - Germany, majoring in "Business Informatics“. I also studied Business Administration and currently I’m doing a Master in International Business Administration. I feel a fascination with SEO and the people who make it possible.
16. October 2017 15 Comments

One month ago, Netflix.com had a dramatic loss in Visibility on Google, all over the world. To mention just a few of their important markets: they lost 71% Visibility in the UK, 64% in the USA, 59% in France, 49% in Italy, 43% in Germany and 39% in Spain. Netflix managed to first regain and then even increase their Visibility, just one week later. But now, the Visibility has dropped again, for both Desktop as well as Mobile, and this time, there are no signs of a comeback, even two weeks later:

Visibility Index in the USA (Mobile and Desktop):

Visibility Index in the USA for mobile and desktop

Visibility Index in the UK (Mobile and Desktop):

Visibility Index in the UK for mobile and desktop

Visibility Index in Germany (Mobile and Desktop):

Visibility Index in Germany for mobile and desktop

Visibility Index in Spain (Mobile and Desktop):

Visibility Index in Spain for mobile and desktop

Visibility Index in Italy (Mobile and Desktop):

Visibility Index in Italy for mobile and desktop

Visibility Index in France (Mobile and Desktop):

Visibility Index in France for mobile and desktop

One of Netflix’ interesting and somewhat unique problems comes from the fact that they work with different content providers in different countries in order to license the streaming rights for a variety of TV shows and movies. This may mean that Netflix cannot offer the same content in all of the countries they service. Netflix seems to be trying to deal with this situation, though not in the most elegant way.

Showing Google one thing and the users something different

It looks like many SEOs are unable to escape this temptation when it comes to international SEO and Netflix seems no different. This is the most probable reason for the first drop on Google, one month ago. The user was getting a different version of a page than the search engine crawler. This is a cut and dried case of cloaking and Google might have just eliminated these search results.

Allow me to show you one example which still works today, so you can try it out yourself. Google’s search result for the keyword “The Founder” delivers Google and users different versions:

The version for Google:

Content delivered to Google by Netflix

The version that visitors (e.g. in the UK) see when they access the same movie:

Content delivered to Users by Netflix

You only see the same content as Google if you are in the USA and I do not believe that Netflix is cloaking on purpose. They have to deal with a number of different licenses in a number of different countries, but that still does not change the fact that cloaking is considered a violation of Google’s Webmaster Guidelines.

The second most relevant element, that adds more chaos to this constellation, is the way in which Netflix redirects users based on their IP location. Bad idea for International SEO!

Second Drop – Same Problem but Worse

Initially it might sound like a good idea to determine what version of your page your visitors gets to see, based on their IP location. The big problem for SEOs comes in the form that the Googlebot crawlers are based in the USA, most of the time, giving them a United States IP address.

Let’s use “The Big Bang Theory” as an example. This show can be streamed on Netflix in both the United Kingdom and Germany, but not in the USA – because CBS has chosen to exclusively run the show on their own streaming platform, CBS All Access.

The default URL for “The Big Bang Theory” is the following: https://www.netflix.com/title/70143830. If you are in Germany, you will be redirect from there to https://www.netflix.com/de/title/70143830 based on your IP, and you get this content:

Netflix offer in Germany – “The Big Bang Theory”

If you are in the UK, you will be redirected from the default URL to https://www.netflix.com/gb/title/70143830 based on your IP, and you get this content:

Netflix offer in the UK – “The Big Bang Theory”

Netflix redirects the users from different countries based on their IP, but, as I said before, Google crawls from the USA and there Google gets a 404 “Not Found” for the default URL:

Netflix offer in the USA – “The Big Bang Theory”

As a result, all the rankings for “The Big Bang Theory” are gone for all countries. Take a look at the keywords lost on Google.co.uk:

Lost Keywords related to “The Big Bang Theory” on Google.co.uk

If we dig deeper with our analysis, we can see that the URL for this TV-Show has no more Visibility on Google.co.uk:

Visibility Index for just one URL of Netflix.com

They were ranking well 5 weeks ago, then they dropped because of their cloaking and they just disappeared again because Netflix is telling Google this content does not exist.

There is no way for Google to find out the right URL for each country. This is the ranking history of the keyword “The Big Bang Theory” for Netflix.com, it’s just gone:

Ranking History of the Keyword “The Big Bang Theory” for Netflix.com on Google.co.uk

Netflix also produces in-house shows or acquires the exclusive rights to stream content (Netflix Originals). These cases do not represent a problem because the shows can be streamed everywhere, and therefore also rank everywhere. An example would be Narcos.

What we can learn – Takeaways

  1. Redirecting users based on their IP location is nearly always doomed to fail.
  2. Cloaking is also doomed to fail with the added perk of being a very, very bad idea.
  3. Follow Google’s recommendations. Use hreflang for language and regional URLs. Here some tips:

(a) Every URL shlould get their own markup

<link rel="alternate" href="https://www.example.com/en-us/" hreflang="en-US" />

<link rel="alternate" href="https://www.example.com/en-gb/" hreflang="en-GB" />

<link rel="alternate" href="https://www.example.com/de-de/" hreflang="de-DE" />

<link rel="alternate" href="https://www.example.com/de-at/" hreflang="de-AT" />

<link rel="alternate" href="https://www.example.com/es-es/" hreflang="es-ES" />

<link rel="alternate" href="https://www.example.com/es-mx/" hreflang="es-MX" />

Neither capitalisation nor the order of attributes make a difference. Keeping to the specifications though – lower case for the language, upper case for the country – can help to keep possible confusions to a minimum.

<link rel="alternate" hreflang="en-US" href="https://www.example.com/en-us/" />

<link rel="alternate" hreflang="en-GB" href="https://www.example.com/en-gb/" />

<link rel="alternate" hreflang="de-DE" href="https://www.example.com/de-de/" />

<link rel="alternate" hreflang="de-AT" href="https://www.example.com/de-at/" />

<link rel="alternate" hreflang="es-ES" href="https://www.example.com/es-es/" />

<link rel="alternate" hreflang="es-MX" href="https://www.example.com/es-mx/" />

(b) Don’t forget the confirmation links. If page A links to page B, page B must link back to page A. In our example, all 6 URLs must contain the same 6 lines. Missing only one markup on one of the six pages can already cause your entire hreflang construct to become invalid.

(c) en-UK is not English for the United Kingdom! Use the correct language codes: The language is defined though ISO-639-1 codes and countries use ISO-3166-1-alpha-2 codes.

(d) There are 54 sovereign states where English is an official language and Spanish is the official language for 20 sovereign states. If you want to cover all of these countries, without creating 70 new entries, simply use an entry that just specifies the language. The important thing to remember is that language is a must (!), while country is only optional.

<link rel="alternate" href="https://www.example.com/en/" hreflang="en" />

<link rel="alternate" href="https://www.example.com/es/" hreflang="es" />

<link rel="alternate" href="https://www.example.com/en-us/" hreflang="en-US" />

<link rel="alternate" href="https://www.example.com/en-gb/" hreflang="en-GB" />

<link rel="alternate" href="https://www.example.com/de-de/" hreflang="de-DE" />

<link rel="alternate" href="https://www.example.com/de-at/" hreflang="de-AT" />

<link rel="alternate" href="https://www.example.com/es-es/" hreflang="es-ES" />

<link rel="alternate" href="https://www.example.com/es-mx/" hreflang="es-MX" />

(e) If you want to show a default page for any language not specifically targeted, add a rel="alternate" hreflang="x-default". On that page you could then offer a page on which users can choose from all existing language versions, for example.

<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />

<link rel="alternate" href="https://www.example.com/en/" hreflang="en" />

<link rel="alternate" href="https://www.example.com/es/" hreflang="es" />

<link rel="alternate" href="https://www.example.com/de/" hreflang="de" />

<link rel="alternate" href="https://www.example.com/en-us/" hreflang="en-US" />

<link rel="alternate" href="https://www.example.com/en-gb/" hreflang="en-GB" />

<link rel="alternate" href="https://www.example.com/de-de/" hreflang="de-DE" />

<link rel="alternate" href="https://www.example.com/de-at/" hreflang="de-AT" />

<link rel="alternate" href="https://www.example.com/es-es/" hreflang="es-ES" />

<link rel="alternate" href="https://www.example.com/es-mx/" hreflang="es-MX" />

(f) John Müller said: “Just language or x-default might also be an option (and can all be combined).” You can use the URL for one country and language for other countries, too. You can use the URL for the UK (en-GB) also for Ireland (en-IE). The German URL (de-DE) can also be used for Luxembourgh (de-LU). And another example would be the Mexican URL (es-MX), which is also a good fit for searchers from Columbia (es-CO).

<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />

<link rel="alternate" href="https://www.example.com/en/" hreflang="en" />

<link rel="alternate" href="https://www.example.com/es/" hreflang="es" />

<link rel="alternate" href="https://www.example.com/de/" hreflang="de" />

<link rel="alternate" href="https://www.example.com/en-us/" hreflang="en-US" />

<link rel="alternate" href="https://www.example.com/en-gb/" hreflang="en-GB" />

<link rel="alternate" href="https://www.example.com/de-de/" hreflang="de-DE" />

<link rel="alternate" href="https://www.example.com/de-at/" hreflang="de-AT" />

<link rel="alternate" href="https://www.example.com/es-es/" hreflang="es-ES" />

<link rel="alternate" href="https://www.example.com/es-mx/" hreflang="es-MX" />

<link rel="alternate" href="https://www.example.com/en-gb/" hreflang="en-IE" />

<link rel="alternate" href="https://www.example.com/de-de/" hreflang="de-LU" />

<link rel="alternate" href="https://www.example.com/es-mx/" hreflang="es-CO" />

(g) Be very careful when using hreflang and canonicals together. The canonical tag should never point to a different URL outside the hreflang markup! Having a canonical point to a URL can cause your entire hreflang construct to become invalid.

(h) Make sure that all URLs you use in your hreflang markup actually exist. Linking to non-existent URLs can – guess what? – cause your entire hreflang construct to become invalid.

(i) You can use the Google Search Console to specify the “international targeting” also for directories or subdomains. If you use this option, please make sure that your hreflang markup on the pages does not send conflicting signals.

I hope you like and have a great start into the new week!

Sources:
https://support.google.com/webmasters/answer/6144055?hl=en
https://support.google.com/webmasters/answer/2604723?hl=en
https://www.seroundtable.com/google-dont-redirect-by-ip-location-24125.html
https://support.google.com/webmasters/answer/62399
https://developers.google.com/search/mobile-sites/mobile-seo/dynamic-serving?hl=en
http://www.rebelytics.com/multiple-hreflang-tags-one-url/
https://www.sistrix.com/hreflang-guide/

David Sottimano
16. October 2017, 15:35

Hey Juan, nice post. One thing, “Be very careful when using hreflang and canonicals together. The canonical tag should never point to a different URL than the hreflang markup! Having a canonical point to a URL can cause your entire hreflang construct to become invalid.” isn’t true. It doesn’t invalidate the hreflang annotations/clustering, it’s orthogonal and can be used together if you understand the intended behavior.

Juan Gonzalez
16. October 2017, 15:56

Hi David,
Thank you for your comment! I’m glad you like it 🙂

The information about hreflang and canonicals comes straight from @johnmu (https://plus.google.com/+JohnMueller/posts/17fbv5phpks) so you’ll have to take it up with him o_0

I do agree though that it is crucial to “… have to understand the intended behaviour”.

Cheers,
Juan

David Sottimano
16. October 2017, 16:10

He says “Make sure any rel=canonical you specify matches one of the URLs you use for the hreflang pairs. If the specified canonical URL is not a part of the hreflang pairs, then the hreflang markup will be ignored.”

Here’s a practical example where this works in practice. Imagine you had 2 near duplicate pages, example.com/us and example.com/gb.

You could rel canonical example.com/gb to example.com/us and that would effectively remove example.com/gb from the visible index, i.e. an info:example.com/gb search would return example.com/us (assuming they are duplicate enough and Google did not reject the canonical instruction).

Then, because these pages should be shown to UK and US respectively, you would cluster them in hreflang annotations on both pages:

This works because:

-The content is roughly identical or identical
-The language is the same
– The canonical target is included in the hreflang annotations

Juan Gonzalez
16. October 2017, 16:42

Hi David,

What you are saying is exactly what both John and I am writing. You have a canonical version (/us) which is also part of your hreflang markup (clustered in the hreflang annotations on both pages).

What would be a problem in your example would be the use of example.com/usa as canonical while hreflang only specifies example.com/us as “en-US”.

” […] the hreflang markup will be ignored.” is the kinder way of saying “[…] can cause your entire hreflang construct to become invalid.“

I just went ahead and added a clarification (outside) to the text. It now reads “The canonical tag should never point to a different URL outside the hreflang markup!”

Dr. Tiki
16. October 2017, 18:05

But is this a possible solution to Netflix‘ problems? Google bot is based in the US and will presumably remain a US visitor and therefore will show The Big Bang Theory to US citizens – just to tell them a click later that they‘re not entitled to watch this show. Is this a better way to deal with your customers? I think it‘s Google‘s fault not to crawl from different locations.

16. October 2017, 19:20

Hi Dr. Tiki

if you read through the first soucre (https://support.google.com/webmasters/answer/6144055?hl=en) you will find that Google might try to crawl from different locales and with different Accept-Language headers (which Netflix does not seem to use). But it is still true that most of the time, Googlebot will have a US IP address.

One strategy to deal with this might be to use geolocation on the x-default page for a title (eg. https://www.netflix.com/title/70143830) but have the country pages (eg. https://www.netflix.com/de/title/70143830 for Germany) accessible to all areas. That way Googlebot could get the necessary info for that language and country there.

This would have to encompass some way to block viewing the series through that URL of course, which is possible but a different can of technology to open.

It might also be an idea to have the x-default page with a notice, that the series is not available in the USA, with the rest of the info about the series still intact, but no way to watch it.

Best wishes

Patrick

16. October 2017, 20:01

Hi Juan – Laura from Netflix here. Drop 1 was a bug on our end not a Google penalty. Drop 2 was a fix that provided the correct response headers for titles, so a *lot* of titles that shouldn’t have been in search results are now giving the correct response (like a 404 for The Big Bang Theory in the US – that doesn’t currently exist in the US library).

Juan Gonzalez
17. October 2017, 09:47

Hi Laura,

thank you very much for your insights!

As I said in my post, whatever the reason may have been, this is called cloaking and every user on Google is able to test it. I know Netflix is not doing that on purpose, you have to handle a lot of licenses for different countries.

The second drop is exactly what you say and what I explain in the blogpost. You don’t want to rank The Big Bang Theory in the USA, but in Germany and in the UK I am sure you still want to show up in the SERPs, as the show is available in both countries. If you eliminate the content for the USA, you are eliminating the content for all countries. You need to find another solution and one possible option is called hreflang.

I keep my fingers crossed and hope that you will fix this problem soon.

17. October 2017, 00:06

Great article Juan, thanks for sharing it.

Do you think Netflix SEO will becoming worse as time goes by?

Kind regards,
Filip

Juan Gonzalez
23. October 2017, 17:14

Hi Filip,

Netflix SEO does not have to get worse. As I said on the article, they have Netflix Originals.

Cheers,

Juan

vivek
17. October 2017, 06:54

I found Tripadvisor as the best use case when we talk about handling international SEO through attribute

17. October 2017, 08:59

We faced the same disaster some time back with one of our biggest client, sometimes you are checking for some big issue when your organic listing drops but the problem is really tricky and minute, also last month updates from google they are shaking up the mobile serps rankings for all the clients 😕

Bob Gladstein
17. October 2017, 21:56

I don’t think I’d call redirecting based on IP address “cloaking”. Cloaking would involve presenting different content to users and googlebot at the same URL. It’s certainly problematic if the bot doesn’t see the same content as people in Germany, but that’s because the people in Germany are being sent to a different URL, not because Netflix is sniffing for googlebot’s user-agent and presenting it with different content.

I think what Netflix need to do, assuming their hreflang implementation is good, is drop the automatic redirection, give users a choice of country and then cookie them, and give googlebot access to content that exists for other countries.

Juan Gonzalez
23. October 2017, 17:16

Hi Bob,

the cloaking does not happen on https://www.netflix.com/title/70143830 but on the country versions of the URLs. There Googlebot is presented with different content (actually non, it’s a 404 page) than users from that country.

Cheers,

Juan

[…] Netflix’ SEO Problems on Google and What You Can Learn From Them […]