AJAX 支持搜索引擎问题分析

AJAX 支持搜索引擎问题分析

搜索引擎可以的爬行器(spider)抓取网站的数据,并将其存储在搜索引擎的数据库中。搜索引擎将这些数据从数据库中检索出来以满足用户的查询需求。然而,一些网站是使用了 AJAX 技术来实现异步请求的,这可能会导致搜索引擎无法获取到这些网站的数据,而无法对其进行索引。

要解决这个问题,我们需要做一些改变,以便搜索引擎可以正确地获得网站的数据。

1.使用 Escape Fragment(转义片段)来处理 URL

搜索引擎可以检索 URL 中的数据,并将其转换为搜索结果。然而,如果我们的网站使用了 AJAX 技术,那么这些 URL 将不再包含必要的信息,导致搜索引擎无法正确地检索这些数据。要解决这个问题,我们可以通过使用 Escape Fragment 来处理 URL。

例如,在普通的 URL 中,数据被传递到服务器的方式可能是这样的:https://www.example.com/search?query=keyword。 在使用 AJAX 技术的网站上,JavaScript 代码可能会向服务器发出异步请求,例如: https://www.example.com/search#!query=keyword。 在这里,我们使用了问号(?)来分隔关键词和值,但是使用 AJAX 技术时,我们必须使用井号(#)。

要使这些 URL 对搜索引擎可用,我们可以使用 Escape Fragment。这项技术利用了搜索引擎在 URL 中发现井号(#)时处理 URL 的方法,以便读取基于 AJAX 的内容。

例如,我们可以在网站的头部加入以下代码:

<meta name="fragment" content="!">

这将告诉搜索引擎,当发现 URL 中出现井号(#)时,请将其转换为 Escape Fragment,然后检索该页面的内容。

2.提供 AJAX 钩子

搜索引擎无法识别 AJAX 动态更新的网页。 要使搜索引擎知道网站是否使用 AJAX 技术动态更新数据,请为每个页面提供 AJAX 钩子。 钩子是一种向搜索引擎发送 crawled 和 indexed 信号的技术。

例如,可以在 WordPress 网站上使用以下代码来提供 AJAX 钩子:

function my_asynchronous_content() {
  if ( ! is_singular() ) {
    return false;
  }
  if ( false == strpos( get_template(), 'single' ) ) {
    return false;
  }
  return true;
}
function my_fragment() {
  global $post;
  if ( ! my_asynchronous_content() ) {
    return '';
  }
  $html = '<div class="my-asynchronous-content">';
  ob_start();
  get_template_part( 'content', 'single' ); // the loop
  $loop_contents = ob_get_clean();
  $html .= $loop_contents;
  $html .= '</div>';
  return $html;
}
function my_status_header( $status_header, $header, $text, $protocol ) {
  if ( ! $protocol || 'HTTP/1.1' != $protocol ) {
    return $status_header;
  }
  if ( preg_match( '/^\d+/', $status_header, $matches ) ) {
    $status_code = intval( $matches[0] );
  } else {
    $status_code = 200;
  }
  if ( $status_code >= 200 && $status_code < 300 ) {
    header( 'X-WP-Nocache: ' . $_SERVER['REQUEST_URI'] );
  }
  return $status_header;
}
function my_setup_head() {
  if ( my_asynchronous_content() ) {
      add_action( 'wp_head', 'my_asynchronous_script', 50 );
  }
}
function my_asynchronous_script() {
?>
  <script type="text/javascript">
    jQuery(document).ready(function($) {
      if (typeof history.pushState !== "undefined") {
        var url = window.location.href;
        $('.my-asynchronous-content').each(function() {
          $(this).attr('id', 'tmp-' + Math.floor(Math.random() * 99999).toString(16));
          var tmp_container = $('#' + $(this).attr('id')).get(0);
          var my_fragment = $(this).parent().next('.my-asynchronous-content-data').html();
          history.replaceState({
            'ajax_content': true,
            'my_fragment': my_fragment
          }, '', url);
          $(this).html('');
          $.ajax({
            url: url,
            type: 'GET',
            success: function(response) {
              var el = $('.my-asynchronous-content', response).filter(function() {
                return $(this).attr('id') === tmp_container.id;
              });
              el.html($(el).parent().next('.my-asynchronous-content-data').html()).css('display', $(tmp_container).css('display')).css('visibility', 'visible');
              var new_title = $('title', response).text();
              $('title').text(new_title);
              history.replaceState({
                'ajax_content': true,
                'my_fragment': el.parent().next('.my-asynchronous-content-data').html()
              }, '', url);
            }
          });
        });
        $(window).on('popstate', function(event) {
          if ( event.originalEvent.state && event.originalEvent.state.ajax_content && event.originalEvent.state.my_fragment ) {
            $('.my-asynchronous-content').html(event.originalEvent.state.my_fragment);
            var new_title = $('title', response).text();
            $('title').text(new_title);
          }
        });
      } else {
        console.log('History API is not supported');
      }
    });
  </script>
<?php
}
add_filter( 'status_header', 'my_status_header', 10, 4 );
add_action( 'wp_enqueue_scripts', 'my_setup_head' );
add_action( 'wp_footer', 'my_fragment' );

通过提供 AJAX 钩子,我们可以让搜索引擎知道网站中有一些 AJAX 动态数据,并为其提供索引。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AJAX 支持搜索引擎问题分析 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS公共小方法之判断对象是否为domElement的实例

    接下来我将为大家详细讲解JS公共小方法之判断对象是否为domElement的实例的完整攻略,包含以下几个部分: 介绍如何判断对象是否为domElement的实例 提供两条示例说明 总结 1. 判断对象是否为domElement的实例 在JavaScript中,有时候我们需要判断一个对象是否为DOM元素的实例。这是因为DOM元素是一种独特类型的对象,它们是浏览…

    JavaScript 2023年6月10日
    00
  • jquery获取URL中参数解决中文乱码问题的两种方法

    接下来我将详细讲解“jquery获取URL中参数解决中文乱码问题的两种方法”的完整攻略。 问题描述 由于中国所有的编码都是基于 Unicode,因此 UTF-8 编码也经过传递被应用在了 URL 地址中。而浏览器在向服务器传递请求的时候,会自动将请求参数进行编码(包括中文),所以在 URL 中看起来是一堆乱码,而我们在使用 jQuery 获取 URL 中的参…

    JavaScript 2023年5月19日
    00
  • Javascript实现跨域后台设置拦截的方法详解

    下面是“Javascript实现跨域后台设置拦截的方法详解”的完整攻略。 什么是跨域 跨域指的是在一个网页加载另一个网页的资源时,由于受到安全限制,无法读取对方资源的问题。比如从A站点的网页向B站点发送AJAX请求的过程中,如果B站点的资源不允许A站点的请求,就会产生跨域问题。 为什么需要防止跨域 跨域攻击是指攻击者利用目标网站对跨域问题的缺乏安全防范措施,…

    JavaScript 2023年6月11日
    00
  • JavaScript中的数组操作介绍

    当谈到JavaScript时,数组(Array)通常是最常用的数据结构之一。尤其在现代Web开发中,数组操作非常重要。下面我们将详细介绍JavaScript中的数组操作,内容包括以下几点: 声明和初始化数组 常用的数组操作方法 数组迭代器 示例 1. 声明和初始化数组 在JavaScript中声明和初始化数组有多种方式。最常见的方式是使用Array构造函数来…

    JavaScript 2023年5月18日
    00
  • js对字符的验证方法汇总

    针对“js对字符的验证方法汇总”的完整攻略,我给您详细的解答。 一、什么是字符验证? 在Web开发中,从用户处获得数据是非常重要的,但在接受数据时,需要对其进行验证,以保证数据的正确性和完整性。字符验证是保证输入正确性和完整性的方法之一,即在接受字符数据后,判断所输入的字符是否符合一定的验证规则。 二、字符验证的应用场景 字符验证通常用于以下场景: 用户名 …

    JavaScript 2023年5月28日
    00
  • 关于JavaScript中的数组方法和循环

    关于JavaScript中的数组方法和循环,我们可以从下面几个方面来进行详细讲解。 数组方法 push方法 push方法可以将一个或多个值添加到数组的末尾,并返回修改后的数组长度。示例代码如下: let fruits = [‘apple’, ‘banana’]; let len = fruits.push(‘orange’); console.log(fru…

    JavaScript 2023年5月18日
    00
  • JavaScript文件的同步和异步加载的实现代码

    那么我们来详细讲解一下JavaScript文件的同步和异步加载的实现代码的攻略。 什么是同步和异步加载 在Web前端开发中,我们一般用JavaScript来实现页面交互和动态效果等,因此需要将JavaScript文件加载到HTML页面上。JavaScript文件的加载可以分为同步和异步两种方式。 同步加载的方式是按照JavaScript文件在HTML页面中的…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript的while循环的使用

    详解JavaScript的while循环的使用 简介 JavaScript 中提供了循环语句来重复执行代码块,其中 while 循环是其中之一。while 循环是基于条件执行的循环,只要给定条件为真,就会执行循环体,直到给定条件为假。 语法 while 循环的语法如下: while (condition) { // 循环体语句 } 其中 condition …

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部