2010-11-21 190 views
6

首先,来看看这个演示页面:http://vidasp.net/tinydemos/seo-javascript-links.htmlJavaScript链接和搜索引擎优化?

还有就是页面上的菜单,点击菜单项就会显示各种链接到其他网站的页面(即是网址的一部分) 。链接网址的格式如下:

www . foo . com/articles/XXX/descriptive-title-of-the-article 

...其中XXX是给定文章的三位ID。

这一切似乎都不错,但有一个问题:所有这些链接通过JavaScript动态创建。查看源代码 - 在页面底部有一个JavaScript变量(db变量),它包含用于生成链接的所有数据。

我正在使用JavaScript,因为我不想使用服务器端。我假设,在这种情况下,我将不得不将数据存储在SQL数据库中,然后使用C#/ PHP /等。生成链接。但是,这不是我的选择 - 我严格面向客户端的 。

顺便说一句,如果你想看到更精细的JavaScript生成链接演示,请点击这里 - http://www.w3viewer.com - 该网页上有400个链接,所有链接都是通过JavaScript动态生成的。

问题:

现在,我喜欢这种方法 - 使用JavaScript来生成链接 - 然而,这种做法的后果是,搜索引擎爬虫不会登记任何这些链接 - 他们只是“看到”一个没有链接的空白页面(我认为这是一个SEO灾难)。

所以,我想知道,我怎么能优化这种方法?

更新(后续问题):

我不能使用谷歌地图,告诉谷歌爬虫其在web站点存在网页的页面?这样我就可以保持首页(上面的演示)(没有静态链接),并且抓取工具会使用站点地图抓取我网站上的所有网页。

我不知道谷歌的Sitemaps做任何事,但我想知道为什么没有人建议他们。他们可以解决我的问题吗?

+3

只是想知道,什么都会没有JavaScript的用户看到了什么?当我禁用JS时,我得到** no **链接。任何你为什么不想让你的链接生成服务器端? – Marko 2010-11-21 20:29:17

+1

Marko,JS今天是标准。没有人期望人们编写与无JS浏览器兼容的网站。 – Kos 2010-11-21 20:31:18

+0

@Marko没有JavaScript的用户什么也看不到,显然:)尝试访问W3浏览器禁用JavaScript - 这里没有什么...另外,请尝试访问W3浏览器与IE,并检查出重定向:p – 2010-11-21 20:31:30

回答

3

看起来你真正需要做的是在部署之前使用模板生成HTML,使用类似Template::Toolkitttree。然后,您可以将您的数据库保存在您的开发机器上。不需要JavaScript。

下面是一个简化的例子:

[%- 
db = { 
    Foo => [ 
     { id => "001", title => "First article" }, 
     { id => "002", title => "Another article" }, 
     { id => "003", title => "Yet another article" }, 
    ], 
    Bar => [ 
     { id => "004", title => "First article in this category" }, 
     { id => "005", title => "Another article in bar" }, 
     { id => "006", title => "Third bar article" }, 
    ], 
    Baz => [ 
     { id => "007", title => "Baz article No. 1" }, 
     { id => "008", title => "The second Baz article" }, 
     { id => "009", title => "The last article" }, 
    ], 
} 
-%] 

[%- FOR category IN db.keys -%] 

<h2>[%- category -%]</h2> 

[%- articles = db.$category -%] 

[%- FOR article IN articles -%] 

<p>Article: <a href="http://www.example.com/articles/[%- article.id -%]/"> 
    [%- article.title -%]</a></p> 

[%- END -%] 
[%- END -%] 
C:\Temp> tpage t.html
<h2>Bar</h2> 

<p>Article: <a href="http://www.example.com/articles/004">First article in this 
category</a></p> 

<p>Article: <a href="http://www.example.com/articles/005">Another article in bar 
</a></p> 

<p>Article: <a href="http://www.example.com/articles/006">Third bar article</a>< 
/p> 

<h2>Baz</h2> 

<p>Article: <a href="http://www.example.com/articles/007">Baz article No. 1</a>< 
/p> 

&hellip;

+0

@Sinan我也在想这个。但是,数据库条目 - “{id:”001“,标题:”第一条“} - 和HTML输出 - ”The first article“之间的大小差异很大。有了100个链接,我的页面上会有额外的10K。我希望避免这种情况。 – 2010-11-21 20:40:42

+0

那么,你可以使用:'The first article'这应该减少一些大小(假设这些文章在同一台服务器上)。另外,如果'gzip'压缩打开,额外的10K应该不会引人注目(应该测试这个;-) – 2010-11-21 20:46:05

+0

@Sinan谢谢你的例子,但我可以通过JavaScript轻松生成HTML代码(如果我愿意你的方法和“预编译”HTML代码)。 – 2010-11-21 20:49:51

0

同时使用js和href ... 诀窍是只需要网站的href工作,这是什么谷歌机器人将看到 在同一时间,如果浏览器支持使用js点击处理程序。

当然从处理程序返回false也停止href。

0

您可以使用<noscript> All your anachor links here</noscript>这意味着抓取工具和javascript关闭的用户也会看到链接。你永远不应该忘记没有javascript的用户,并且基于javascript的页面功能(不提供无脚本选择),这也将使你在SEO方面受益。

+1

Guard这意味着我将不得不在服务器端生成这些锚点,这正是我想要避免的。 – 2010-11-21 20:43:21

1

如果您因为更喜欢使用JavaScript到其他语言而避开服务器端,那么您始终可以在服务器上使用node.js。已经有支持Express的a jQuery Templates view engine for node.js,所以您甚至可以在客户端或服务器上使用相同的模板。

无关:您不应该在CDN上使用对jQuery的“最新”引用(即1.4 vs 1.4.4)。这些要求are served with a very short expires header,这是一个很大的性能劣势。此时,如果您只使用自托管副本,则返回访问者的速度会更快。

+0

+1是的,我对node.js感兴趣。在服务器端使用JavaScript将是解决我的问题的好方法。但是,我将不得不进一步研究它,因为我目前对node.js没有经验。你可以告诉我,我需要什么样的托管服务。我目前有ASP.net托管... – 2010-11-21 21:17:41

+0

我可以保证它很容易设置在运行Ubuntu的VPS上。您可以使用Cygwin在Windows上运行它,但我不知道它与直接支持的环境相比有多稳定。也请查看http://no.de – 2010-11-22 00:29:36

1

只是一个快速的事情要注意,如果您的网站地图中包含的链接无法通过抓取您的网站获得,您将被标记在搜索引擎中。由于这些页面被视为与大多数主要搜索引擎相对的门户页面,也没有引用网址,所以他们将得到非常低的分数,即使他们确实被索引,他们也不会很好地排名。

+0

+1是的,似乎只使用站点地图对我来说不是一个解决方案。 – 2010-11-22 17:14:54

0

使用站点地图有助于您的网页能够被Google抓取,但Google会通过网页标题+内容对您进行排名。此外,如果你使用永久链接(你已经在使用),并且页面标题也存在于身体内部的h1标签中,那将会很棒。

你最好把一些内容作为HTML内的身体。你应该用javascript来丰富页面功能。但是,Google网页完全是JavaScript,它也不喜欢JavaScript。这是统治者,直到它识别出JavaScript内容,我们都应该采用规则。

如果你想添加一个站点地图,你可以使用下面的脚本。

要顶:

<?xml version="1.0" encoding="UTF-8"?> 
<urlset 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" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 

重复URL列表。随着时间的推移区,优先考虑0到1日期,默认为0.5:

<url> 
<loc>page url</loc> 
<lastmod>2011-02-06T03:13:29+02:00</lastmod> 
<changefreq>monthly</changefreq> 
<priority>0.7</priority> 
</url> 

结束:

</urlset>