S
S
sochi-russia2022-01-04 01:09:26
PHP
sochi-russia, 2022-01-04 01:09:26

Did you do the right thing about site retargeting by country and Yandex and Google PS robots?

Website has 3 pages

  1. site.ru
  2. site.ru/ru/
  3. site.ru/en/


When entering the first page, the user's country is determined and redirected depending on the location in this way: On the main page, at the very top, the code is written
<?php 
require_once('config.php'); //The above code
$geoplugin = new geoPlugin();
$geoplugin->locate();
// create a variable for the country code
$var_country_code = $geoplugin->countryCode;
// redirect based on country code:
if ($var_country_code == "RU") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "US") {
header('Location: https://www.site.ru/en/');
}
else if ($var_country_code == "UA") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "KG") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "UZ") {
header('Location: https://www.site.ru/ru/');
}
else {
header('Location: https://www.site.ru/en/');
}
?>


Here is the content of the config.php file
<?php
   class geoPlugin {
    var $host = 'http://www.geoplugin.net/php.gp?ip={IP}&base_currency={CURRENCY}&lang={LANG}';
    var $currency = 'USD';      
    var $lang = 'en';    
    var $ip = null;
    var $city = null;
    var $region = null;
    var $regionCode = null;
    var $regionName = null;
    var $dmaCode = null;
    var $countryCode = null;
    var $countryName = null;
    var $inEU = null;
    var $euVATrate = false;
    var $continentCode = null;
    var $continentName = null;
    var $latitude = null;
    var $longitude = null;
    var $locationAccuracyRadius = null;
    var $timezone = null;
    var $currencyCode = null;
    var $currencySymbol = null;
    var $currencyConverter = null;      
    function __construct() {    
    }
    
    function locate($ip = null) {           
        global $_SERVER;            
        if ( is_null( $ip ) ) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }           
        $host = str_replace( '{IP}', $ip, $this->host );
        $host = str_replace( '{CURRENCY}', $this->currency, $host );
        $host = str_replace( '{LANG}', $this->lang, $host );            
        $data = array();            
        $response = $this->fetch($host);            
        $data = unserialize($response);         
        //set the geoPlugin vars
        $this->ip = $ip;
        $this->city = $data['geoplugin_city'];
        $this->region = $data['geoplugin_region'];
        $this->regionCode = $data['geoplugin_regionCode'];
        $this->regionName = $data['geoplugin_regionName'];
        $this->dmaCode = $data['geoplugin_dmaCode'];
        $this->countryCode = $data['geoplugin_countryCode'];
        $this->countryName = $data['geoplugin_countryName'];
        $this->inEU = $data['geoplugin_inEU'];
        $this->euVATrate = $data['euVATrate'];
        $this->continentCode = $data['geoplugin_continentCode'];
        $this->continentName = $data['geoplugin_continentName'];
        $this->latitude = $data['geoplugin_latitude'];
        $this->longitude = $data['geoplugin_longitude'];
        $this->locationAccuracyRadius = $data['geoplugin_locationAccuracyRadius'];
        $this->timezone = $data['geoplugin_timezone'];
        $this->currencyCode = $data['geoplugin_currencyCode'];
        $this->currencySymbol = $data['geoplugin_currencySymbol'];
        $this->currencyConverter = $data['geoplugin_currencyConverter'];            
    }       
    function fetch($host) {    
        if ( function_exists('curl_init') ) {                           
            //use cURL to fetch data
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $host);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.1');
            $response = curl_exec($ch);
            curl_close ($ch);               
        } else if ( ini_get('allow_url_fopen') ) {              
            //fall back to fopen()
            $response = file_get_contents($host, 'r');              
        } else {    
            trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR);
            return;         
        }           
        return $response;
    }       
    function convert($amount, $float=2, $symbol=true) {         
        //easily convert amounts to geolocated currency.
        if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) {
            trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE);
            return $amount;
        }
        if ( !is_numeric($amount) ) {
            trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING);
            return $amount;
        }
        if ( $symbol === true ) {
            return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float );
        } else {
            return round( ($amount * $this->currencyConverter), $float );
        }
    }       
    function nearby($radius=10, $limit=null) {    
        if ( !is_numeric($this->latitude) || !is_numeric($this->longitude) ) {
            trigger_error ('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE);
            return array( array() );
        }           
        $host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}";         
        if ( is_numeric($limit) )
            $host .= "&limit={$limit}";             
        return unserialize( $this->fetch($host) );    
    }       
}    
?>


The problem is that the Google robot receives the English version of the site, and the main one I have is Russian. Robot Gula has an American IP. Is it possible to somehow write a condition through UserAgent so that the Google and Yandex robots always receive the Russian version of the site?

Here is what Yandex support writes:
I will only note that our indexing robots can be accessed from different countries, so you should make sure that the same redirect is constantly performed on their requests, even if the robot accessed, for example, from an American IP. You can read about how to check that a robot belongs to Yandex on our Help page. And help on useragent


I tried to do this, is it correct or not?
<?php 
require_once('config.php'); //The above code
$geoplugin = new geoPlugin();
$geoplugin->locate();
// create a variable for the country code
$var_country_code = $geoplugin->countryCode;
// redirect based on country code:
if ($var_country_code == "RU") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "US") {
header('Location: https://www.site.ru/en/');
}
else if ($var_country_code == "UA") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "KG") {
header('Location: https://www.site.ru/ru/');
}
else if ($var_country_code == "UZ") {
header('Location: https://www.site.ru/ru/');
}
else {
header('Location: https://www.site.ru/en/');
}
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
        $options = array(
            'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
            'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
            'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
            'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
            'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
            'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
            'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
            'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
            'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
            'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
            'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
            'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
            'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
            'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
            'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
            'DomainVader', 'DCPbot', 'PaperLiBot'
        );
        header('Location: https://www.site.ru/ru/');}
?>

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question