Repository navigation
answers QAPage: the Question node had no author and no date - #3318
Merged
Merged
Conversation
Search Console flagged four recommended fields on /answers/which-hyperliquid-frontend-has-the-most-builder-revenue, and all four sit on the same node: author and datePublished on mainEntity, plus upvoteCount and datePublished on mainEntity.acceptedAnswer. The QAPage wrapper around the question already carried an author, a datePublished and a dateModified. The Question entity inside it, which is what Google reads for the Q&A result, carried none of them. One item is reported only because one answers URL has been crawled as a QAPage so far; every page in the cluster is built by this same code. upvoteCount is 0 and is meant to stay 0. Nothing on this site votes, and Google's guidance is to send 0 rather than omit the field. Any other number would be an invented engagement figure in structured data. The dates keep their meaning: datePublished is when the question first had a page, dateModified is when the numbers behind the answer last refreshed. suggestedAnswer gets the same pair, since it already carried a dateModified with no datePublished to anchor it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Flotapponnier
added a commit
that referenced
this pull request
Oct 28, 2026
…3319) Search Console flagged four recommended fields on /answers/which-hyperliquid-frontend-has-the-most-builder-revenue, and all four sit on the same node: author and datePublished on mainEntity, plus upvoteCount and datePublished on mainEntity.acceptedAnswer. The QAPage wrapper around the question already carried an author, a datePublished and a dateModified. The Question entity inside it, which is what Google reads for the Q&A result, carried none of them. One item is reported only because one answers URL has been crawled as a QAPage so far; every page in the cluster is built by this same code. upvoteCount is 0 and is meant to stay 0. Nothing on this site votes, and Google's guidance is to send 0 rather than omit the field. Any other number would be an invented engagement figure in structured data. The dates keep their meaning: datePublished is when the question first had a page, dateModified is when the numbers behind the answer last refreshed. suggestedAnswer gets the same pair, since it already carried a dateModified with no datePublished to anchor it. (cherry picked from commit 9c2cbd0) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Search Console, Q&A report, four "Improve item appearance" warnings on
/answers/which-hyperliquid-frontend-has-the-most-builder-revenue, first detected 2026-10-21:authormainEntitydatePublishedmainEntityupvoteCountmainEntity.acceptedAnswerdatePublishedmainEntity.acceptedAnswerAll four sit on the same node. The
QAPagewrapper already carriedauthor,datePublishedanddateModified; theQuestionentity inside it, which is what Google reads for the Q&A rich result, carried none of them. The accepted answer had anauthorand nothing else.Google reports one affected item because one answers URL has been crawled as a QAPage so far. Every page in the cluster is built by this same component, so the fix covers all of them.
What the values are, and why
upvoteCount: 0, permanently. Nothing on this site votes. Google's guidance is to send 0 rather than omit the field, and any other number would be an invented engagement figure sitting in structured data. The comment in the code says so, so nobody later "improves" it into something non-zero.Dates keep the meaning they already had on the page node.
datePublishedisgetBenchCreatedAt(bench.slug), when the question first had a page.dateModifiedisbench.lastRunAt, gated oncitableAsOfexactly as the wrapper gates it, because the answer text is derived from the board and changes when the numbers do.suggestedAnswergets the same pair. It already carried adateModifiedwith nodatePublishedto anchor it, which is the shape that produced two of these four warnings on the accepted answer.Gates:
tsc --noEmitclean,bun test src/731 pass 0 fail,pnpm validate257 specs valid, eslint clean on the changed file.After the staging deploy I will parse the JSON-LD off the live page to confirm the four fields are present before anyone clicks VALIDATE FIX in Search Console, since validation failing once puts the issue back in the queue for another month.
One thing I did not change
QAPageis Google's type for pages where users submit answers to a question. These pages have one question and one site-written answer, which is closer to whatFAQPagedescribes. The current type was a deliberate choice (there is a comment explaining the upgrade fromArticle), the items validate today, and switching types is a different decision from filling in four recommended fields, so I left it. Worth revisiting on its own if the Q&A results ever stop appearing.