2

站点地图很酷。如果我想要一个用于我的流星项目,我想我可以执行以下操作之一:

  1. 硬编码 sitemap.xml 文件并放入 /public/ 文件夹。不是动态的,但谷歌很容易找到。对于子页面很少的应用程序可能就足够了。
  2. (根本没有尝试过)使用流星路由器在/sitemap.xml(?)创建一个动态站点地图并将其输出为XML。动态的,但对于谷歌来说并不是很容易找到,因为它是动态加载的(也许是可蜘蛛的包?)

但这对我来说都不是很满意。我希望它是动态的,但存储在一个(最好是)静态文件中,Google 很容易找到它。或类似的东西。

最好的方法是什么?

4

2 回答 2

3

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

你需要meteor路由器和meteor的http。Meteor router 有一个先决条件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您的路由器代码。将 url 调整到您的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;
});

您可能需要进一步自定义它以完全符合您的要求。我不能说我已经尝试过上述方法,我并不真正熟悉如何以最佳方式使用站点地图,但它可能会让你开始

于 2013-04-02T22:48:46.263 回答
2

这个包看起来很有希望:

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

于 2013-12-17T14:08:32.723 回答