manuel-schoebel / ms-seo Goto Github PK
View Code? Open in Web Editor NEWA seo helper package for meteor.js
A seo helper package for meteor.js
When visiting not-existent page while using dataNotFound plugin We get exception like this:
Exception from Tracker recompute function: debug.js:41 TypeError: Cannot read property 'getName' of undefined
Problem is in following method:
getCurrentRouteName = ->
router = Router.current()
return unless router
routeName = router.route.getName()
return routeName
We check is ruter is undefined but in this case routes is defined but router.route is not.
It would be nice to add additional check for router.route or maybe special SeoCollection item for undefined 'dataNotFound' route.
When i define the default description it will be loaded correctly into the Dom. But when setting the description for a sepcific route it will not be loaded to the dom.
I use exactly your example on http://www.manuel-schoebel.com/blog/meteor-and-seo
I updated the meteor version ot 0.8 and now this package fails
Error: Can't wait without a fiber
at Function.wait (/home/action/.parts/packages/meteor/0.8.0/tools/c2a0453c51/lib/node_modules/fibers/future.js:83:9)
at Object.Future.wait (/home/action/.parts/packages/meteor/0.8.0/tools/c2a0453c51/lib/node_modules/fibers/future.js:325:10)
at _.extend._nextObject (packages/mongo-livedata/mongo_driver.js:805)
at _.extend.forEach (packages/mongo-livedata/mongo_driver.js:836)
at _.extend.map (packages/mongo-livedata/mongo_driver.js:846)
at _.extend.fetch (packages/mongo-livedata/mongo_driver.js:870)
at Cursor.(anonymous function) [as fetch] (packages/mongo-livedata/mongo_driver.js:695)
at app/server/sitemaps.js:15:28
at Object.sitemaps.add.root [as handle] (packages/sitemaps/sitemaps.js:37)
at next (/home/action/.parts/packages/meteor/0.8.0/packages/webapp/9dd975a6fc/npm/node_modules/connect/lib/proto.js:190:15)
hello, i realized by installing this smart package, the meta tag added by spiderable <meta name="fragment" content="!">
is being deleted by ms-seo.
so that defeats the purpose of having this package since google will not be able to index any meteor pages if spiderable is not there.
i noticed this problem because despite sending in sitemaps, configuring ms-seo, on google i still see only my root page indexed with no title and description. lol.
Please help.
Is there a way to specify multiple og:image elements for the same route?
Hi,
Altough everything seems to work after page load,
seo benchmark and crawler tools give bad result - no title, description, keywords, text found....
I did tests on
http://www.feedthebot.com/tools/
http://seositecheckup.com/
Do I miss something or is this package just not working?
Anyone same problem?
Best regards
Benny
Hello,
It looks like the package is removing/updating the tag that is needed to install a Chrome install via webpage. After removing the package, the inline extension works as expected.
How can I set this tag manually or how can we avoid this tag (rel='chrome-webstore-item') to be deleted?
Thanks.
Regarding the captioned, would adding more fields to SeoCollection and making use of i18n package work?
If not, how should it be handled?
Many thanks.
Calvin
I'm a novice in SEO, but I hear that people don't recommend use a lot of keywords per page.
Is it true? Could you give me recommendation about how much keywords I should use per page.
It is not an issue, just a question.
I am doing SEO for my project first time. Is meta tag description should be full text of post itself or brief description of full text. which one is better? I am doing dynamic SEO so full text of post is easy to do.
I am wondering it could any effect on app performance(using onAfterAction)
Thanks
I have a not fully investigated this but when rendering my notFoundTemplate
with the current Meteor and Iron Router, this package throws an exception.
This line blows up as Router.current()
exists but Router.current().route
is undefined.
Hi Manuel,
I am attempting to display images that are in an array within a collection called Properties.
so within my onAfterAction block:
var property = this.data();
var photo1 = property.pictures.[0].url;
var photo2 = property.pictures.[1].url;
var property_address = property.street + ' ' + property.town + ', ' + property.province;
SEO.set({
title: 'Title - ' + property_address,
meta: {'description': property.propertyDescription},
og: {
'title': property.street,
'description': property.propertyDescription,
'image': [photo1, photo2],
}
});
In any case, this isn't working because of my second line in the block pertaining to photo1. Meteor complains about the square brackets.
Do you have a suggestion or a work around to inset dynamic content into the OG tags from an array?
Thank you for any and all help you can provide.
I am loving the package. Thank you so much for your amazing work and blog post!
hello, package works fine at 0.1.4. However once i upgraded to 0.2.2, I observe that on my static pages, the title and meta tags are not being updated as before.
Nonetheless when i do a SeoCollection.findOne(), I found there's a document matching my current route.
Hi!
Working with iron router 1.0.0.
For notfound routes the console shows this message:
Exception from Tracker recompute function: Cannot read property 'getName' of undefined
TypeError: Cannot read property 'getName' of undefined
at getCurrentRouteName (http://localhost:3000/packages/manuelschoebel_ms-seo.js?a89d18fbd4bd0b6f17b578bdb2f40eefa4ab4c3f:281:27)
at http://localhost:3000/packages/manuelschoebel_ms-seo.js?a89d18fbd4bd0b6f17b578bdb2f40eefa4ab4c3f:299:22
at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:288:36)
at Tracker.Computation._recompute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:302:14)
at Tracker.flush (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:430:14)
Thanks!
This package is published under the manuelschoebel:wait in the Atmosphere.
It still says : " a blog system for meteor"
maybe " easily config SEO for your routes " or something :)
Awesome package
The given code for static routes in README.md
:
SeoCollection.insert({
route_name: 'aboutMe',
title: 'About - Manuel Schoebel',
meta: {
'description': 'Manuel Schoebel is an experienced web developer and startup founder. He develops but also consults startups about internet topics.'
},
og: {
'title': 'About - Manuel Schoebel',
'image': 'http://manuel-schoebel.com/images/authors/manuel-schoebel.jpg'
}
});
stores a lot of unnecessary data in the SeoCollection. I did a db.seo.count()
(a few days after deployment) and it returned 8586
. I only have 9 static routes which I have configured with this Seo package, so this should have returned 9
. Each route should have one and only one document related to it. I solved it by doing an update on server instead:
if(Meteor.isServer) {
SeoCollection.update({
route_name: 'aboutMe'
},
{
$set: {
route_name: 'aboutMe',
title: 'About - Manuel Schoebel',
meta: {
'description': 'Manuel Schoebel is an experienced web developer and startup founder. He develops but also consults startups about internet topics.'
},
og: {
'title': 'About - Manuel Schoebel',
'image': 'http://manuel-schoebel.com/images/authors/manuel-schoebel.jpg'
}
}
},
{
upsert: true
});
}
If I now understand correctly (based on my own tests) once you have defined some values for route in collection (let's say meta viewport or og:locale) you can't define other values (let's say page title or og:url) in router configuration(?) In other words mixing values from static and dynamic settings as described in README.md.
Example use case: dynamic pages can have many values which are static, like og:locale ("en_US"), but some other values are dynamic e.g. og:url ("http://example.com/post/23"). It is IMO better/easier to handle these static values in collection as well this way can be reduced code and not having data mixed with code. ... or am I missing now something :)
On startup of my app
Hi,
is it possible to have the og:url meta tag automatically set according to the route rendered by IronRouter? I tried inserting a function in SEO.config, but it has not been evaluated.
Francesco
Uncaught TypeError: Cannot set property 'content' of null detector.js:450
(anonymous function) detector.js:450
(anonymous function) detector.js:456
// convert to array
var jsonString = JSON.stringify(_apps);
// send back to background page
var meta = document.getElementById('chromesniffer_meta');
meta.content = jsonString;
Hi Manuel,
Thanks for this excellent package and the discussion on your blog. Now that you've helped me pinpoint where this issue arises, I thought it would help to post it as an issue here too.
When I set a title dynamically using the onAfterAction
hook, the title shows up fine in the browser, but it does not show up in the output of curl localhost:3000/?_escaped_fragment_=
.
The problem only appears when I add a waitOn
function to my route. When this is removed, it works.
Here is an example: https://github.com/RacingTadpole/ms-seo-example
Thanks for your help, and apologies if I'm doing something wrong!
when i set the meta dynamically, DOMs are keep appear and disappear because of reactive datasource, could you help me to point out where am I possibly do wrong?
/Users/dirkstevens/.meteor/packages/meteor-tool/.1.1.2.wg5oyf++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245
throw(ex);
^
TypeError: undefined is not a function
at __coffeescriptShare (packages/manuelschoebel:ms-seo/seo_collection.coffee:1:22)
at /Users/dirkstevens/MadeWithWonder/albemarledreams/.meteor/local/build/programs/server/packages/manuelschoebel_ms-seo.js:22:4
at /Users/dirkstevens/MadeWithWonder/albemarledreams/.meteor/local/build/programs/server/packages/manuelschoebel_ms-seo.js:53:3
at /Users/dirkstevens/MadeWithWonder/albemarledreams/.meteor/local/build/programs/server/boot.js:222:10
at Array.forEach (native)
at Function..each..forEach (/Users/dirkstevens/.meteor/packages/meteor-tool/.1.1.2.wg5oyf++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
at /Users/dirkstevens/MadeWithWonder/albemarledreams/.meteor/local/build/programs/server/boot.js:117:5
Exited with code: 8
Your application is crashing. Waiting for file change.
somehow if I don't give msseo an non reactive object, it keeps calling the hooks of iron router and refreshing the page enc...
maybe someone else can use it?
onBeforeAction: function() {
Meteor.call('addPostView', this.params._id, this.params.user);
var post;
post = Posts.findOne(this.params._id, {reactive: false});
if (!Meteor.isClient)
return;
SEO.set({
title: post.title,
meta: {
'description': (post.summary ? post.summary : post.title)
},
og: {
'title': event.title,
'description': (post.summary ? post.summary : post.title)
}
});
this.next();
},
I've noticed a weird issue. When I include this package in the Telescope codebase, it will overwrite document.title
and set it to an empty string. This happens as soon as I include the package in my app, even if I don't call it anywhere in my codebase.
In this video you can see the title is getting properly set (via document.title=...
), and then immediately changes: http://recordit.co/RKrcSzwzee
I think this is already fixed but not pushed to athmosphere.
It appears that ms-seo is not compatible with Meteor 0.9.0
Error:
W20140827-19:58:12.466(0)? (STDERR) The package manuelschoebel:ms-seo at 0.2.6 is incompatible with Meteor 0.9.0 or later.
W20140827-19:58:12.577(0)? (STDERR) If a new, compatible version of this package exists, running 'meteor update' should cause you to update.
Hey,
Looks like the latest update to Meteor is breaking this package. Stack trace is below:
downloading iron:router at version 0.9.3 ... done
upgraded iron:router from version 0.9.1 to version 0.9.3
My-iMac:the-web matfin$ meteor
[[[[[ ~/Sites/the-web ]]]]]
=> Started proxy.
=> Started MongoDB.
W20140910-18:49:20.877(2)? (STDERR)
W20140910-18:49:20.932(2)? (STDERR) /Users/test/.meteor/packages/meteor-tool/.1.0.28.nyv8hj++os.osx.x86_64+web.browser+web.cordova/meteor-tool-os.osx.x86_64/dev_bundle/lib/node_modules/fibers/future.js:173
W20140910-18:49:20.933(2)? (STDERR) throw(ex);
W20140910-18:49:20.933(2)? (STDERR) ^
W20140910-18:49:20.933(2)? (STDERR) TypeError: undefined is not a function
W20140910-18:49:20.933(2)? (STDERR) at __coffeescriptShare (packages/manuelschoebel:ms-seo/seo_collection.coffee:1:21)
It would probably be better to set in seo.coffee
:
settings: {
ignore:
meta: ['fragment']
link: ['stylesheet', 'icon', 'apple-touch-icon']
}
By the way, why must the package remove these tags?
couldn't we just define the parameters like this? without arrays using the associative array directly. i assume in the head section order doesn't matter and we wouldn't need to define same name'd attributes multiple times
SEO.set
title: data.name
meta:
description: data.description
og:
title: data.name
description: data.description
Hi @DerMambo!
Great job with this package, thanks...
I notice a delay when changing from the standard values to the dynamic ones.
Just wondering if there is any problem with google robots just "seeing" the standard.
A doubt from a SEO beginner.haha Sayin bulshit?
Thanks man!
hello,
I'm using meteor 0.8 and based on your documentations it say:
Meteor.startup(function() {
return SEO.config({
title: 'Manuel Schoebel - MVP Development',
meta: {
'description': 'Manuel Schoebel develops Minimal Viable Producs (MVP) for Startups'
},
og: {
'image': 'http://manuel-schoebel.com/images/authors/manuel-schoebel.jpg'
}
});
});
unfortunately this does not works. Server sides it throw the following error:
ReferenceError: SEO is not defined
the correct way to set this up is:
Meteor.startup(function () {
if(Meteor.isClient){
SEO.config({
title: 'Manuel Schoebel - MVP Development',
meta: {
'description': 'Manuel Schoebel develops Minimal Viable Producs (MVP) for Startups'
},
og: {
'image': 'http://manuel-schoebel.com/images/authors/manuel-schoebel.jpg'
}
});
}
});
i will attach a pull request.
thx
I see it supports rel_author. Have you considered supporting all the News Sitemap and other Google News requirements for publishers?
Hello, now the package uses Iron Router by default, what is about a case, when you have a different router? (e.g. Flow Router)
What is the solution? Do I have to use another SEO package?
I ran into some issues structuring my data set for the SEO collection. My data is as follows:
// SEO Tags
SeoCollection.insert({
"route_name": "home", // the name of the Iron-Router route
"title": "Crisp Painting - Interior Painting Professionals",
"meta" : [
{
"key" : "description",
"value" : "Crisp Painting is a fast growing painting company, specializing in high-volume apartment, residential, and commercial painting.",
},
{
"key": "tags",
"value" : "painters, West Lafayette, Lafayette, Indiana, Indianapolis, Bloomington",
}
],
"og" : {
'title' : 'Interior Painting Professionals. Operating in Lafayette/West Lafayette, Indianapolis, and Bloomington, Indiana',
'image' : 'http://crisppainting.com/images/logo.png',
}
});
I am only seeing the og:title, 'tags', and half of the og:image metas show up on my page. The title and meta description of the page are not working.
I'm seeing a weird issue in Meteor 1.0.3 where SEO.set({ ... }); isn't able to see my local post variable. Code below:
onAfterAction: function() {
if (!Meteor.isClient) {
return;
}
var post = this.data();
SEO.set({
'title': post.title,
'meta': {
'description': post.short
},
'og': {
'title': post.title,
'description': post.short,
'image': post.image_url
}
});
}
Exception in callback of async function: TypeError: Cannot read property 'title' of undefined (this is throwing at the first call of post.title)
The data exists, if I do console.log(post) I can see everything I'm looking for. Any suggestions?
It looks like ms-seo clear all my meta tags and the ignore setting is only applicable for attribute name.
Is there any way I can insert my meta charset tag?
I'm getting the following when trying to install ms-seo.
✓ iron-router
tag: https://github.com/EventedMind/iron-router.git#v0.6.2
✓ ms-seo
tag: https://github.com/DerMambo/ms-seo#v0.1.0
/usr/local/share/npm/lib/node_modules/meteorite/lib/sources/git.js:151
hrow "There was a problem checking out " + self.checkoutType + ": " + (self.co
Other meteorite modules install fine.
I'm pretty sure, that this only an issue of my application hosted with heroku - the title tag is empty and the description tag doesn't appear at all in the html created by phantomjs. Is there a known issue related to heroku?
I am using SEO with IronRouter. I have the following call:
SEO.set({title: 'Home - ' + Meteor.App.NAME});
in a route onAfterAction function. I noticed that using SEO the route gets called twice. Removing the SEO call it gets correctly called once. Am I doing anything wrong?
hello,
I'm passing some dynamic strings to SEO.set to be set on the meta tags. However I realized that the strings are not properly escaped to be inserted into the meta tags
here's my original string for instance:
"My fault? You've never really changed, have you? All these years—" she stepped forward to brutally pistol-whip me across the face. Or where my face was. I rolled out of the way, and behind her. In a ...
Here's the generated meta tag
Hello,
I get the following error:
https://gist.github.com/sadiqevani/5a6c2c0419d331852558
What might it be ?
Hey!
How to add title on the dataNotFound plugin?
console tells me:
Exception from Tracker recompute function: debug.js:41 TypeError: Cannot read property 'getName' of undefined
I have some config:
Meteor.startup(function() {
if (Meteor.isClient) {
return SEO.config({
title: "someTitle",
meta: {
"description": "someDesc"
}
});
}
});
Hi Manuel,
Am I doing something wrong? I can see correct title tag in inspector, but google webmaster tools complains that I don't have title tags in my pages. I am setting up SEO in controller's onAfterAction
like this:
...
onAfterAction: function() {
SEO.set({
title: "Meteor Generator",
meta: {
description: "Contribute to Meteor.js code generator"
},
og: {
title: "Meteor Generator",
description: "Contribute to Meteor.js code generator"
}
});
...
Site is here: www.meteorkitchen.com
I attached screenshot from webmaster tools.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.