我在一个包含15个子站点和13个不同架构页面的大型项目中。
目前,该网站基于ui.route
所有网页和$http
角度请求设置的数据。
在搜索控制台上进行测试和试用之后,看起来像google看不到我的所有页面,除了主页和来自$http
请求的数据都没有显示出来。
我做错了什么?
在<head>
:
<base href="/" />
创建.htaccess:
RewriteEngine On
Options FollowSymLinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /#/$1 [L]
添加到app.config
:
$locationProvider.html5Mode(true);
符合我的app.config
:
function createState(name) {
return {
url: '/' + name + '/:id',
templateUrl : 'templates/pages/' + name +'.html',
controller : 'singlePage',
resolve: {
pageData: function(getData, $stateParams) {
var params = $stateParams;
params.type = this.self.name;
return getData.getPageData(params.type, params)
}
}
}
}
.state('info', createState('info'))
.state('news', createState('news'))
.state('event', createState('event'))
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode(true);
答案 0 :(得分:2)
谷歌机器人不编译JavaScript,ui-router在这里不起作用所以当谷歌机器人来抓取URL(无论是什么网址)时,它总是会得到网站的索引页面。在服务器端通过检查用户代理检测机器人,然后您可以使用 phantomjs 加载角度应用程序并为机器人编译html。(这是我用于我的应用程序。在服务器上我有节点js)
从here
了解详情答案 1 :(得分:1)
为什么Google抓取工具不会关注UI路由器创建的链接/状态更改?
好吧,谷歌抓取机器人能够执行JavaScript(此功能不久前实现)。
但是机器人仍然像往常一样抓取URL。它正在检查href
属性
您的所有a
- HTML标记中的标记,并进行跟进。如果您使用的是JavaScript状态
由ui.router
提供的更改功能机器人永远无法关注此链接。
它也无法识别HTML5 URL路由已更改。 - &GT;所以不会抓取/索引任何页面
您可以使用一些基本的SEO功能来抵消这种情况。但是你还有一些限制 需要处理。其中一些限制是:
og:image
时在Facebook上共享页面等不适用于AngularJS E2E绑定)title
标记无法通过社交媒体形式识别。 如何让抓取机器人为您的网页编制索引?
这非常简单,只需创建包含所有网址的sitemap.xml
,将其上传到您的网络服务器并使用google webmastertools进行注册即可。谷歌机器人现在将抓取您在sitemap.xml
中提供的所有网址,最后它将索引您的网页/网址! =)
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://example.com/</loc>
</url>
<url>
<loc>http://example.com/anotherside/</loc>
</url>
<url>
<loc>http://example.com/search/param1/param2</loc>
</url>
</urlset>
我们做到了这一点并且运作良好。您可以手动创建sitemap.xml
。我们向前迈进了一步并自动化了这些东西。我们的XML和ui.routes
是在我们的Web应用程序的后端创建的。所以我们有一个配置JSON文件,我们在其中配置所有路由。脚本创建XML和JavaScript ui.routes
自动。
这是我们所做的结果:https://www.google.de/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=site:linslin.org&start=0
如果您想构建一个优秀的SEO /社交优化页面,请不要使用像AngularJS这样的SPA应用程序。我也不想创建预编译器。创建SPA应用程序并预编译它是没有意义的。在创建预编译器之前,您应该使用PHP,Node.JS,Java等来创建Web应用程序。