Можно ли исключить поисковых роботов (например, Google) из сценария перенаправления Cloudflare? - PullRequest
0 голосов
/ 29 января 2020

Я использую работника Cloudflare, чтобы перенаправить посетителей на правильную версию веб-сайта, например:

addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request))
  })

  /**
   * Respond to the request
   * @param {Request} request
   */
  async function handleRequest(request) {
    country_code = request.headers.get('CF-IPCountry');
    var link;

  switch(request.headers.get('CF-IPCountry')) {
    case 'TW':  // Taiwan
    link = "https://www.website.com/twn";
        break;
    case 'TH':  // Thailand
    link = "https://www.website.com/tha";
        break;
    case 'GB':  // United Kingdom
    link = "https://www.website.com/gbr";
        break;
    case 'US':  // United States
    link = "https://www.website.com/us";
        break;
    default:
      link = "https://www.website.com/rotw" // Rest of the world
  }

  return new Response('', {
          status: 301,
          headers: {
            'Location': link
          }
        })
  }

Проблема в том, что бот Google перенаправляется на website.com/us, и, следовательно, мои входные точки Google поступают посетители прямо на сайт / us. Есть ли способ исключить поисковых роботов из скрипта перенаправления страны и направить их прямо на website.com вместо website.com/countrycode?

1 Ответ

2 голосов
/ 29 января 2020

Не могли бы вы сделать что-то вроде этого. Я не проверял это.

addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request))
  })

  /**
   * Respond to the request
   * @param {Request} request
   */
  async function handleRequest(request) {
    country_code = request.headers.get('CF-IPCountry');
    var link;

  let userAgent = request.headers.get('User-Agent') || ''
  if (userAgent.includes('Googlebot')) {
    return new Response('', {
          status: 301,
          headers: {
            'Location': "https://www.website.com/"
          }
        })
  }

  switch(request.headers.get('CF-IPCountry')) {
    case 'TW':  // Taiwan
    link = "https://www.website.com/twn";
        break;
    case 'TH':  // Thailand
    link = "https://www.website.com/tha";
        break;
    case 'GB':  // United Kingdom
    link = "https://www.website.com/gbr";
        break;
    case 'US':  // United States
    link = "https://www.website.com/us";
        break;
    default:
      link = "https://www.website.com/rotw" // Rest of the world
  }

  return new Response('', {
          status: 301,
          headers: {
            'Location': link
          }
        })
  }
...