SEOClerks

Must have structure data for content: Aggregaterating



Write the reason you're deleting this FAQ

Must have structure data for content: Aggregaterating

For the past year, I've been experimenting with Structure Data from schema.org. I've mastered the basic schema.org categories like Website, Organisation, Breadcrumbs, Sitelinks, Person, etc.

I've managed to integrate Google My Businesses based card results when searching my name on a local level amount other cool stuff.
But the best structure data implementation that had the most significant impact on all websites I'm currently managing as an SEO expert, were BlogPosting + AMP and Aggregaterating.

I've talked about BlogPosting + AMP before - they really make a great team providing nice picture based snippet results with the AMP icon for all mobile searches. This will increase your overall organic CTR which in turn will force Google to give you better positions and rankings for those specific pages.

So what is Aggregaterating and how can it help increase your organic traffic?

Have you ever noticed some google results content that 5-star rating snippet? That's implemented with a schema.org AggregateRating category; you can find it here: http://schema.org/AggregateRating.

The only catch about this is that you need to give users a real and workable way actually to review your content. They need to have the option to give your article a 1-5 star score, otherwise, if you just implement the AggregateRating markup inside the page code only, Google will penalize you for faking this system.

Once you have AggregateRating markup implemented properly at the end or beginning of your content, Google will index your pages with the star snippet as well as on how many votes that rating is based on. Just like this:
Must have structure data for content: Aggregaterating

Keep in mind the above example shows you a rating for a product. Products pages, in general, need to have comments based review with a user's name assigned to each review.
When it comes to content just a star rating feature will do, you don't need to implement comment reviews.
Something like this at the end of each page should be enough:
Must have structure data for content: Aggregaterating

So how do you implement AggregateRating?

Well, if you have coding skills you do it yourself if you are using anything else except Wordpress and you don't have any coding skills you will have to turn to a developer to implement this. But if you are indeed are a Wordpress user you can install a custom plugin to make this happen in about 10 minutes.

I used: https://ro.wordpress.org/plugins/kk-star-ratings/ - on multiple blogs and websites, and it worked fine every time without any bugs or conflicts.
It is very easy to install and configure, just used the following settings: 
Must have structure data for content: Aggregaterating
Must have structure data for content: Aggregaterating
Or you can configure the plugin and adapt it to your specific needs.
Just keep one thing in mind: the AggregateRating markup won't be present if it doesn't have at least one review. The trick is this plugin doesn't have an automatic way of implementing at least one fake review. So if you really want to see that start rating inside search results really fast, you will need to vote your content yourself on every page, I recommend doing it on the very important content at first and let it work itself naturally on the other pages. It makes take a while, but I think it is much better for Google to witness the rest of your pages get some natural ratings rather than just having "one vote" on all of them all at once.

If you have a website, don't forget AggregateRating markup should be mandatory! I assure you most of your big competitors already have it; you won't stand a chance if you don't have it either, so implement it because the benefits are great!
Let me know if you have questions or want me to provide additional information about this subjects.
Cheers.

Comments

Please login or sign up to leave a comment

Join
DenisP
"So if you really want to see that start rating inside search results really fast, you will need to vote your content yourself on every page..."

Isn't this somewhat risky behavior? I would imagine that most websites don't really take kindly to vote manipulation like that. Personally, I probably wouldn't risk it and would just wait for the votes to come in naturally.

Otherwise, really good stuff here. I know that when I look up certain services or products, the ones that have ratings instantly available are the ones that I usually go for first. This is definitely a good way to attract potential clients.



Are you sure you want to delete this post?

Cristian
Well, I've tested this method on multiple websites over the last couple of months. I had no problems. As long as you set everything so that it only get one vote per IP you are going to be fine.
I believe you Google won't tell if that is your own IP or if it is the IP of a real user. Nevertheless, the one rating will appear, which isn't very good in my opinion since a good piece of content should have more than one vote and the more you have the better Google will rank you, so start the snippet with one rating and then just let it build organic over time, if you get enough visits.



Are you sure you want to delete this post?

Corzhens
Even if you are using different IP addresses for the voting of your sites, I don’t think it is a good idea because first and foremost it is unethical to vote for yourself and secondly voting for yourself constitute cheating. But I understand that some site owners will be doing that for the sake of traffic. It looks like site traffic is now getting control of the sites and site owners seem to be slaves of SEO work.



Are you sure you want to delete this post?

DenisP
I can definitely understand the desperation some people might feel in the pursuit of progress, and will be driven towards taking measures like voting manipulation. While I don’t believe that voting for yourself one time could be considered “highly unethical,” it certainly isn’t morally sound behavior.

Ignoring ethics, even if you do use a different IP address, I think there are still ways that companies can tell it’s you voting for yourself, in the same way that proxy addresses don’t work on many websites. I don't know the programming behind it, but it's only logical to assume that companies are going to have some sort of counter measures for people trying to cheat the system.



Are you sure you want to delete this post?

DarthHazard
I've always wondered about this because it makes your site look so much better when someone searches for something on Google and your site is one of the results. Plus, it makes your search result stand out especially if the other search results for that search do not have the review stars.



Are you sure you want to delete this post?

kgord
I think you have some really good information here as well as an explanation of how it works. I think that many people might be interested in this type of information and could use it to make their site rank high, and come up quickly when someone is doing a search.



Are you sure you want to delete this post?

Cristian
Yes, this is why I've written this piece. I generally found very little information on this subject in the past. I've read a few tutorials but nothing very specific, often I had a lot more questions after reading a tutorial.



Are you sure you want to delete this post?

overcast
I think some small business definitely need to add the schema. And that can help get more information about their business on the web. You can see that food restaurant and other types of the business can make use of the schema. And that in itself is really good for the traffic and the money. I have noticed that some people make use of the schema plugin for this to work properly. It should be good enough on that account.



Are you sure you want to delete this post?

Corzhens
I don’t think this kind of rating is feasible for simple people like me. You need to at least have some technical skills because there is coding involved. And with the plug in, I haven’t used it yet and that’s how I envision other bloggers and website owners. But I agree that this method called aggregaterating can have positive effects regarding the search engine ranking that your website can get a pretty good position in terms of the search engine list.



Are you sure you want to delete this post?

alexmorco
No doubt, structure data helped me a lot in improving CTR and ranking higher also an FAQ section, I have tried Schema markup in my WordPress website with rating, feedback, and FAQ.



Are you sure you want to delete this post?

Order Now
Process Time: 1.2631981372833

Possible Duplicate queries found!
MatchCountSQLScript
SELECT * FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='24962'1SELECT q.*, c.seo as CatSEO, c.name as CatName, c.parentid FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='24962'

/opt/clerks-staging/docroot/viewfaq.php 496 () ()

SELECT * FROM seoclerks.members WHERE USERID='134'1SELECT * FROM seoclerks.members WHERE USERID='134'

/opt/clerks-staging/docroot/include/functions/includes/member.php 445 GetAllUserDetails() ()

SELECT * FROM categories_faq WHERE CATID='30'1SELECT CATID, seo, name, metatitle, h2header, metakeywords, metadescription, metaheader, parentid, image_name FROM categories_faq WHERE CATID='30'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() GetCategorySeoFromType()

SELECT * FROM seoclerks.members WHERE USERID=1341SELECT googleplus_profile FROM seoclerks.members WHERE USERID=134

/opt/clerks-staging/docroot/include/functions/main.php 16914 GetGooglePlusProfileFromId() ()

SELECT * FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=24962 LIMIT 51SELECT m.username FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=24962 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM answers a, seoclerks.members b WHERE a.quesid='24962' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc1SELECT a.answer, a.USERID, a.upvotes, a.downvotes, a.ansid, a.parentid, a.combined_votes, a.date_answered, b.username, b.userlevel, b.profilepicture FROM answers a, seoclerks.members b WHERE a.quesid='24962' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc

/opt/clerks-staging/docroot/viewfaq.php 1245 () ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143036 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143036 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143910 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143910 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=176834 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=176834 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=177714 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=177714 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143293 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143293 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143405 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143405 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143912 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=143912 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=144467 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=144467 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=151144 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=151144 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=190418 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=190418 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

UPDATE questions SET total_views = total_views + 1 WHERE quesid='24962'1UPDATE questions SET total_views = total_views + 1 WHERE quesid='24962'

/opt/clerks-staging/docroot/include/functions/main.php 1765 update_Faqviewcount() ()

SELECT * FROM questions WHERE quesid!='24962' AND status='1' AND (question like '%Must structure data content: Aggregaterating%' OR question like '%Must%' OR question like '%structure%' OR question like '%data%' OR question like '%content:%' OR question like '%Aggregaterating%') -- ORDER BY RAND() LIMIT 151SELECT quesid, question, seo, userid FROM questions WHERE quesid!='24962' AND status='1' AND (question like '%Must structure data content: Aggregaterating%' OR question like '%Must%' OR question like '%structure%' OR question like '%data%' OR question like '%content:%' OR question like '%Aggregaterating%') -- ORDER BY RAND() LIMIT 15

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM seoclerks.members WHERE USERID='18733' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='18733' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='3881' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='3881' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='17457' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='17457' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='29425' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='29425' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=24962%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID 1SELECT USERID, username FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=24962%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM categories1SELECT * FROM categories

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() parseRedundantQueriesCache()

select * from categories_software order by name asc1select * from categories_software order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetSoftwareCategories()

select * from categories_wanttobuy order by name asc1select * from categories_wanttobuy order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_wantcategories()

select * from categories_wanttotrade order by name asc1select * from categories_wanttotrade order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_tradecategories()

SELECT * FROM seoclerks.members WHERE USERID='601667.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='601667.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='134.png'1SELECT profilepicture FROM seoclerks.members WHERE USERID='134.png'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='600657.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='600657.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='599711.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='599711.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='589438.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='589438.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

select * from categories_faq order by name asc1select * from categories_faq order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetFaqCategories()

Invalid SQL

count(*)sql1error_msg

Expensive SQL

Tuning the following SQL could reduce the server load substantially
LoadCountSQLMaxMin

Suspicious SQL

The following SQL have high average execution times
Avg TimeCountSQLMaxMin