创建一个meteor.js站点地图

时间:2013-04-02 13:27:12

标签: javascript meteor

站点地图很酷。如果我想要一个我的流星项目,我想我可以做以下其中一个:

  1. 对sitemap.xml文件进行硬编码并放入/ public /文件夹。不是动态的,但谷歌很容易找到。对于子页面较少的应用程序可能就足够了。
  2. (根本没试过)使用/sitemap.xml(?)中的流星路由器创建动态站点地图,并将其输出为XML。动态,但谷歌找不到它,因为它是动态加载的(可能是spiderable包吗?)
  3. 但这对我来说都不是很令人满意。我希望它是动态的,但存储在一个(最好)静态文件中,谷歌很容易找到它。或类似的东西。

    最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

如果有一种方法可以使用客户端路由器动态生成站点地图,可能可以使用Meteor Router

你需要meteor router和meteor的http。流星路由器的前提条件是meteorite,它看起来就像你已经拥有的那样。

因此,第一步是为具有服务器端路由的sitemap.xml创建路由:

Meteor.Router.add('sitemap.xml', function() {
    //get sitemap data (below)
    return generated_sitemap;
});

和生成站点地图的函数:

我们需要router.js,遗憾的是只能在客户端上运行。所以我们需要用meteor.http来获取它。 router.js文件基本上包含路由器代码的Meteor.Router.add位。将网址调整到可能存储router.js文件的位置

routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 

然后我们需要解析那里的路由器数据(确保使用var,因此范围不会破坏实际的路由器)

服务器端js

Meteor.Router.add('/sitemap.xml', function() {
    routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 
    var Meteor = {};
    Meteor.Router = {add:function(input) {return input}};

    //drag the data out of the routerdata, eval is quick and dirty but you could shackle it down further
    routers = eval(routerdata);

    //now generate the sitemap.xml data

    xmldata = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
    for(var url in routers) {
        xmldata+="<url>\n";
        xmldata+="<loc>"+url+"</loc>\n";
        xmldata+="<lastmod>2013-03-03</lastmod>\n";
        xmldata+="<changefreq>daily</changefreq>\n";
        xmldata+="<priority>0.8</priority>\n";
        xmldata+="</url>\n";
    }

    xmldata+="</urlset>";

    return xmldata;
});

您可能需要根据自己的需要进一步自定义它。我不能说我已经尝试过上面的内容我并不熟悉如何最佳地使用站点地图,但它可能会让你有个开始

答案 1 :(得分:2)

这个包看起来很有希望:

https://atmosphere.meteor.com/package/sitemaps