I had a separate mobile site uploaded so as to make Google happy. My big problem is that I had a desktop page that was once showing in the top 3 results on Google, and now it and its mobile alternative are showing up on the 3rd page or worse.

My structure is as follows. The desktop file is www.myserver.com/pellet-calculator.php. The mobile file is www.myserver.com/pelletcalculator.php. I have a PHP redirection working beautifully on the desktop file, placed at the very top of the page, in the following format:

    $url = 'http://m.myserver.com/pelletcalculator.php';
    // only check if the desktop cookie isn't present
    if(!isset($_COOKIE['mobile'])) {
        if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
            header('Location: '.$url.'');

In my bid to resolve this issue, I did some reading. I didn't have any of the links as suggested by Google on their "Separate URL's" page (https://developers.google.com/webmasters/mobile-sites/mobile-seo/configurations/separate-urls?hl=en). I have therefore now added the following links to each file, directly under the <title> tags:

// following link on the desktop page
<link rel="alternate" media="only screen and (max-width: 640px)" href="http://m.myserver.com/pelletcalculator.php" >

// following link on the mobile page
<link rel="canonical" href="http://www.myserver.com/pellet-calculator.php" >

However I'm now worried about 2 things?

1) I'm now worried about my redirect. Google mentioned that Googlebot support javascript redirection, and I'm using PHP redirection. Should I get rid of the above redirect code and replace it with an equivalent javascript code? And if so, where should I place this javascript? Should it be placed above or below the <link> code above?

2) The "alternative" link above mentions media="only screen and (max-width: 640px)", but what if I want to specify all mobile browsers? How should I then rewrite this.

Many thanks for all and any advice.

  • Before you make further changes use the webmaster tools to re-crawl the changed pages with fetch and render. This doesn't answer your question but consider responsive css - it means the layout changes are handled in a single file and applied to all pages, the same page names are used for all visitors, meaning it's less work for you. Example responsive.css files are online with typical settings. It would avoid the problems you are facing & make updates and new pages easier and faster to do. developers.google.com/webmasters/mobile-sites/mobile-seo/…
    – Mousey
    Commented Aug 9, 2015 at 2:12

3 Answers 3


1) Your PHP redirect is great. Google's own documentation recommends a 302 redirect, which is what PHP's header('Location:') function defaults to.

2) You could bump the max-width parameter for your media queries up to 737px which would then cover everything up to an iPhone 6+ sized screen. You could go higher to also include some tablets, but those start getting into the same range as some laptops, where you may not want them to get the mobile site.

  • being an amateur I didn't know that header('Location:') is in fact a 302 redirect. Silly of me, thanks for clearing that up. Should I be placing this redirect within the <html> tag, or at the very top of the page where it is currently? Also, for some reason my brain is telling me that if this redirect comes before the annotation links, google won't see them. I guess this doesn't matter and that I'm overthinking things? Thanks Commented Aug 6, 2015 at 19:56
  • Yes, you have to have it at the top of the page before any output is sent to the user. The link annotations will be read by bots when they visit the page with a non-mobile browser, which is all you really care about, so you're fine there also. Commented Aug 7, 2015 at 13:28

I would suggest being explicit when you modify the headers. So for the redirect, Instead of having:

header('Location: '.$url.'');

You should have:

header("HTTP/1.1 301 Moved Permanently",true);
header("Location: ".$url,true);    

This will then tell the browser you're doing a 301 redirect. Also if you plan on supporting really old browsers that don't understand the Location http header, then you should add some HTML just before the exit();. The exit(); is required to stop further execution of the php program when the redirection is set to take place.


I had the same problem but I worked it out. For the Javascript redirect code you will have to place it at the head. Between <head> and </head>. For the second question concerning reaching all browsers I specified the max-width and the min-width for several screen sizes.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.