Google Authorship conflicts with Comments/Reviews Author

Today, while using Google's Structured Data Testing Tool I found that my Authorship Email Verification fails to match on my name when a customer has left a review on the page.

I'm testing a Page. It contains my by line linked to my Google+ account with “?rel=author” in the link.

The customer's review has a CS-Cart CSS class named “post-author” in its span tag.



Authorship is Working on the webpage with the Google+ link (as reported by the testing tool), and I am email verified on the domain.



The only problem is that when there is a comment by a customer - the Testing Tool reads the customer's name and reports that the email verification name doesn't match the name on the page:

________________________________________________

Automatically detected author name on webpage: Sam Spade.

Error: Author name found on the page and Google+ profile name do not match.

________________________________________________



This must be occurring because Google is finding and reading the “post-author” class and interpreting it as Authorship meta data (author name).

If I delete the comment/review, the problem goes away.



I might add that the most recent Google crawl and re-indexing (after the review was added to the page) has updated my SE results and now the Google+ profile data (image, name, etc.) have been omitted from the results - which sucks.



Any suggestions?

I'll can confirm that this Authorship Verification problem also exists for Products with Reviews.



I will add that Google+ “?rel=publisher” is also included (in the footer of all pages, products, homepage, etc.) and is verified.

I'm considering replacing the entire CS-Cart Reviews addon with this:

CS-Cart Facebook Connect Addon - CartTuning



But… then there is no Review Aggregating in the Meta Data.

If you have the microdata declaration for reviews already in your templates (which you presumably do since you're testing them)*, you should easily be able to resolve this by replacing the reviewers name (“Sam Spade”) with the following in:-



/skins/basic/customer/addons/discussion/views/discussion/view.tpl



Replace:-



With:-




Thanks!

That's a much better solution than I applied.

I just renamed the class to “post-name” and it fixed the problem. I'll undo that and apply your fix.



I'm not currently including “reviewer” (or an actual review “count”) in my metadata - I don't have a function to perform that. I have a “fn_get_average_rating” function for the average rating, and I fake the count so the default minimum data is present. I don't know how to gather the “count” of reviews or define the “review” and “reviewer”. I don't think that function is in CS-Cart.



BTW, this same change needs to be applied to testimonials.tpl in \customer\addons\discussion\blocks\

“review” - just add an if, use the call for “product name” for the product page and “page name - company name” for pages, that's what I would do anyway unless somebody can offer a better solution…?



“reviewer” - use the customers name as it is a required field when submitting a review anyway.



The “count” I assume you mean the total number of individual reviews for a given product? The count is definitely available as I have used it before, as is the average rating which iirc is just ratings divide by count.

I can't figure out how to get the “count” (total number of reviews) out of CS-Cart. It must be a variable in the addon somewhere…

http://www.alt-team.com/cs-cart-extended-reviews-add-on.html



http://goo.gl/WLM0R

Thanks JesseLee I may end up going that route…



Looking at the discussion addon's func.php script it looks like CS-Cart calculates an average for the aggregated review value, but doesn't perform a count in any query. I find this function:

function fn_get_average_rating($object_id, $object_type)
{
$discussion = fn_get_discussion($object_id, $object_type);
if (empty($discussion) || ($discussion['type'] != 'R' && $discussion['type'] != 'B')) {
return false;
}
return db_get_field("SELECT AVG(a.rating_value) as val FROM ?:discussion_rating as a LEFT JOIN ?:discussion_posts as b ON a.post_id = b.post_id WHERE a.thread_id = ?i and b.status = 'A'", $discussion['thread_id']);
}




I added this function:

function fn_get_rating_count($object_id, $object_type)
{
$discussion = fn_get_discussion($object_id, $object_type);
if (empty($discussion) || ($discussion['type'] != 'R' && $discussion['type'] != 'B')) {
return false;
}
return db_get_field("SELECT COUNT(*) as count FROM ?:discussion_rating as a LEFT JOIN ?:discussion_posts as b ON a.post_id = b.post_id WHERE a.thread_id = ?i and b.status = 'A'", $discussion['thread_id']);
}