AJAX 支持搜索引擎问题分析

yizhihongxing

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执行上下文运行原理

    JS执行上下文(execution context)是JS解释器在处理JS代码时,创建的一个对象,用来管理和维护当前代码的执行环境,包括当前作用域内的变量、函数声明、this指向和外部环境等相关信息。本文将通过两条实例,来深入了解JS执行上下文的运行原理。 执行上下文的创建过程 在JS解释器执行JS代码之前,首先会创建一个全局上下文(Global Execu…

    JavaScript 2023年6月10日
    00
  • 关于JSON解析的实现过程解析

    关于JSON解析的实现过程解析 1. 什么是JSON解析? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,比XML更加简洁、易于阅读和理解。JSON解析是将JSON数据格式转换成程序中的对象表示的过程,它是实现Web应用的关键技术之一。 2. JSON解析过程 JSON解析通常分成两个步骤:解析和生成。 解析 解…

    JavaScript 2023年5月27日
    00
  • JavaScript数组去重的6个方法

    下面是对于“JavaScript数组去重的6个方法”的完整攻略。 方法一:Set去重 使用ES6的Set,可以直接将数组转化为Set集合,再转化回数组的时候就自然地去重了。 const arr = [1,2,3,1,2,4]; const newArr = […new Set(arr)]; console.log(newArr); // [1,2,3,4…

    JavaScript 2023年5月27日
    00
  • JS实现视频弹幕效果

    下面是 JS 实现视频弹幕效果的完整攻略: 准备工作 首先,我们需要准备好以下两个文件:- 视频文件- 弹幕 JSON 文件 其中,弹幕 JSON 文件应该包含以下字段:- text:弹幕文本内容- time:弹幕出现时间,单位为秒- color:弹幕颜色,可以是颜色代码或颜色名称 实现步骤 在 HTML 中添加视频和画布元素 在 HTML 中添加一个 vi…

    JavaScript 2023年6月10日
    00
  • Javascript中匿名函数的多种调用方式总结

    Javascript中匿名函数的多种调用方式总结 什么是匿名函数 匿名函数就是没有名字的函数,也称为“内联函数”、“临时函数”或“lambda函数”。 匿名函数的定义方式 函数表达式 函数表达式是定义匿名函数最常用的方式。语法格式如下: var func = function() { // 函数体 } 立即执行函数表达式 立即执行函数表达式是一种定义后就立即…

    JavaScript 2023年6月10日
    00
  • Javascript中暂停功能的实现代码

    要实现Javascript中的暂停功能,可以采用以下几种方法: 方法一:使用setTimeout 使用setTimeout函数可以实现暂停功能,具体实现方式如下: function sleep(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds))…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript节流和防抖函数

    浅谈JavaScript节流和防抖函数 前言 在前端开发中,我们经常会遇到需要监听用户操作并执行相应任务的情况,例如用户在搜索框中输入关键词时,会实时通过ajax请求获取匹配结果;用户在滚动页面时,会自动加载更多的内容等等。但是由于用户的操作往往不可预测,当用户频繁进行操作时,会导致一些性能问题,如频繁地发送请求,重复执行相同的逻辑等等。这时候,就需要用到节…

    JavaScript 2023年6月10日
    00
  • JavaScript引用类型和基本类型详解

    JavaScript引用类型和基本类型详解 在JavaScript中,我们有两种基本数据类型:基本类型和引用类型。 基本类型 基本类型是JavaScript中最基础的数据类型,包括字符串、数字、布尔值、null和undefined。基本类型的特点是它们是直接存储在堆栈中的。也就是说,当你创建一个变量并将一个基本类型的值赋给它时,这个值会被直接存储在变量所在的…

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