- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道是否可以更改显示的 url 并据此更改页面内容,并使 url 和页面内容对机器人友好(这意味着机器人实际上可以为它们编制索引)。
我已经尝试过使用 AJAX 动态加载数据并使用 angularjs 路由,但它们都不能被机器人索引。
漂亮的 urls 和查询字符串 也不是我要找的,我正在寻找一种在着陆时呈现数据并更改路线的理论,在没有页面刷新的情况下点击链接的内容,我不想写两次代码(一次在服务器端,一次在前端)。
这些是我已经尝试过的事情,任何对解决方案的帮助或指导都将不胜感激。
更新
适用于所有语言且不依赖的无库解决方案/结构将是最准确的答案!
最佳答案
这里有一些东西可以代表解决方案的起点。在继续阅读之前,请记住以下关于我的回答的主要事项:
但请注意,草稿代码中的所有内容都是为了解释解决方案,如果您想在生产环境中实现它,则需要改进代码。
让我们从索引页开始。
索引.php
<!DOCTYPE html>
<html>
<head>
<title>Sample page</title>
<meta charset="UTF-8">
<script type="text/javascript" src="ajax_loader.js"></script>
</head>
<body>
<h1>Some static content</h1>
<a href="?main_content=external_content.php">
Link to load dynamic content
</a>
<div id="main_content">
<!--
Here is where your dynamic content will be loaded.
You can have as many dynamic container as you like.
In my basic example you can attach one link to a
single container but you can implement a more
complete solution to handle multiple containers
at the same time
-->
<!-- Leave this empty for the moment... some php will follow -->
</div>
</body>
</html>
现在让我们看看 javascript 如何处理使用 ajax 加载内容的链接
ajax_loader.js
window.onload = function() {
var load = function(e) {
// prevent browser to load link
event.preventDefault();
// exit if target is undefined
if(typeof(e.target) == 'undefined' ) {return;}
// exit if clicked element is not a link
if (e.target.tagName !== 'A') {return;}
// get href from clicked element
var href = e.target.getAttribute("href");
// retrieve container and source
var href_parts = href.split('=');
var container = href_parts[0].substr(1);
var source = href_parts[1];
// instantiate a new request
var request = new XMLHttpRequest();
// bind a function to handle request status
request.onreadystatechange = function() {
if(request.readyState < 4) {
// handle preload
return;
}
if(request.status !== 200) {
// handle error
return;
}
if(request.readyState === 4) {
// handle successful request
successCallback();
}
};
// open the request to the specified source
request.open('GET', source, true);
// execute the request
request.send('');
successCallback = function() {
// on success place response content in the specified container
document.getElementById(container).innerHTML = request.responseText;
// change url in the address bar and save it in the history
history.pushState('','',"?"+container+"="+source);
}
};
// add an event listener to the entire document.
document.addEventListener('click', load, false);
// the reason why the event listener is attached
// to the whole document and not only to the <a>
// elements in the page is that otherwise the links
// included in the dynamic content would not
// liste to the click event
};
现在让我们回顾一下 html 的一些特定元素
如前所述,建议的脚本会将行为附加到任何链接,您只需对其进行格式化,以便 load() 函数可以正确读取。格式为“?container_name=filename.php”。其中 container_name 是要在其中加载内容的 div 的 ID,而 filename.php 是 ajax 调用以检索内容的文件的名称。
因此,如果您的“external_content.php”文件中有一些内容,并希望将其加载到 ID 为“main_content”的 div 中,这就是您要做的
<a href="?main_content=external_content.php">Your link</a>
<div id="main_content"></div>
在此示例中,当页面首次加载时,div“main_content”为空,并在单击您的链接时填充 external_content.php 文件的内容。同时你浏览器的地址栏会从 http://www.example.com/index.php到 http://www.example.com/index.php?main_content=external_content.php并且这个新的 url 将在您的浏览器历史记录中注册
现在让我们更进一步,看看我们如何使这个 SEO 友好,以便 http://www.example.com/index.php?main_content=external_content.php是一个真实的地址,当我们加载页面时 'main_content' div 不是空的。
我们可以添加一些 php 代码来处理这个问题。(请注意,您甚至可以为类似的工作编写一些 javascript,但由于您提到了服务器端语言的使用,我决定使用 php)
<a href="?main_content=external_content.php">Load</a>
<div id="main_content">
<?php dynamicLoad('main_content','default_main_content.php'); ?>
</div>
在展示它之前,我想解释一下 php 函数 dynamicLoad() 的作用。它有两个参数,第一个相当于容器 id,第二个相当于默认内容所在的文件。更清楚地说,如果请求的 url 是 http://www.example.com/该函数会将 default_main_content.php 的内容放入 main_content div但是如果浏览器请求的 url 是 http://www.example.com/index.php?main_content=external_content.php然后函数会将 external_content.php 的内容放入 main_content div。
这种机制有助于页面对 SEO 友好和用户友好,因此当搜索引擎爬虫将遵循 href“?main_content=external_content.php”这带来了网址“http://www.example.com/index.php?main_content=external_content.php ”会发现与 ajax 调用动态显示的内容相同。对于将通过刷新或历史记录重新加载页面的用户来说也是如此。
这是简单的 dynamicLoad() php 函数
<?php
function dynamicLoad($contaner,$defaultSource){
$loadSource = $defaultSource;
if(isset($_GET[$contaner])) {
$loadSource = $_GET[$contaner];
}
include($loadSource);
}
?>
正如第一行所说,这不是准备用于生产的代码,它只是对您提出的请求的可能解决方案的解释
to change the url showing and according to that change the content of the page and make the urls and the content of the page to be robot friendly
关于javascript - 如何在不刷新页面的情况下更改路由和内容? (机器人友好),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37511989/
为了我们公司的 SEO 需求,我们需要通过 301 将一些 SEO URL 更改为另一个 URL。 示例: /seo/keywords-1-2-3/ 到 /seo/mynew301page-1-2-3
使已经开发的 Vue 应用程序对 SEO 友好的最简单方法是什么(搜索引擎可以读取所有标题元标记)。 我已经研究过 NUXT,我将不得不再次重新构建整个过程,而且除了 SSR(服务器端渲染)部分之外,
我正在使用 Azure 数据库进行一些数据库管理,我需要执行查询,例如删除数据库中的所有约束。 sp_MSForEachTable 在使用 Azure 数据库时不可用,因此我正在采用不同的方法来实现此
在我的研究中,我发现了 2 种方法。 两者都需要修改 Global.Asax 中的 Application_BeginRequest 过程,您可以在其中运行代码来进行实际的 URL 映射(我的数据库
例如我有这个字符串: make no@ sen# `se ! 我会像这样生成 url make-no-sen-se! 我有这个: var value = $('.titleVal').val(
我有一个网站,我想开始使用友好的 URL。 所以不是: http://server.com/company.php?id=12 我可以使用: http://server.com/company/ste
我正在用 pandas 编写一些数据分析管道。我一直在使用的数据框中的一列是由自定义编写的类的对象组成的,每个类都用一个字符串初始化,我用正则表达式从中读取各种信息并存储在对象的属性中。子类结构类似于
这个问题已经存在: C++ create new windows command [closed] 关闭 4 年前。 我正在尝试创建一个 C++ 控制台应用程序并创建新命令。 我想做的事的例子:在终
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
我一直在尝试为 prestashop 中的产品创建第二个 url 重写选项.在 SEO 和 URL 部分的标准 Prestashop 安装中,我得到了以下产品 url 构建: {category:/}
我在使用重写引擎通过友好的 url 实现我的目标时遇到了一些问题。 基本上我有以下结构:- 索引.php - 吃下 - index.php 我在主索引中的链接是这样的:下载/index.php?dow
我真的不喜欢在链接中使用选择/选项元素: 但是他们已经找到了作为一种选择进入设计师组合的方式,并尽我所能劝阻他们不要使用它们,我知道如果没有谷歌的力量,我会输掉这场战斗,而且“这对 SEO 不利”。
dispose: function() { var disposer; while (disposer = this._disposers.shift()) { // expected
我将 Heroku 应用程序上的自定义域更改为新域。现在我将创建一个新的 Heroku 应用程序,它的唯一目的是重定向到第一个应用程序。 我在 Google Webmasters 中读到我应该像这样进
我有一个类。这个类有2个字段。 我有一个整数数组。我的任务是重载友好的“+”运算符,以便可以将数组中的字段值与数组元素的值相加。 例如: class Test { public: double
这个问题在这里已经有了答案: Encode URL in JavaScript (22 个答案) 关闭 9 年前。 您好,我有这个 URL(顶部),我正在尝试与“pinterest”一起使用,他们会
jQuery 模式对话框 seo 友好吗?如果不是,我们可以进行哪些更改,以便爬虫可以轻松读取模态对话框中的内容? 提前致谢。 编辑:抱歉忘记提及模式中的内容来自服务器端。所以它也使用 ajax。 最
这是我的 main.js 文件: jQuery(function($) { $('LI.tree-item-name').has('ul').click(function() { if (
static func randomShape() -> Shape { // Find out count of possible shapes var maxValue = 0
我正在构建一个通过 index.php 运行所有代码的网站。 例如 index.php?controller=something&id=01234。 我想使用 PHP 创建友好的 URL,所以我这样做
我是一名优秀的程序员,十分优秀!