Let me write some pseudocode for the current check that is displayed in Search Console. I think that will help a lot on these threads. I could send you the ShEx or SHACL but those are much less human readable.
if not (IsDeletedContent() OR IsExternalContent())
then if not ("text" OR "articleBody" OR "sharedContent" OR "image" or "video")
then report(OneOfThreeRequired("text", "image", "video"))
if not ("author")
then Report(Required("author"))
if not("datePublished")
then Report(Required("datePublished")
The idea is that if the DiscussionForumPosting
/OP has it’s content on the current page, there should be a content field of some sort.
If the DiscussionForumPosting
is referencing content on a different page (like on the original page of multi-page content) it can just have a stub that holds whatever (like the OP topic title) and then references the first page URL. That’s the IsExternalContent()
check which is just checking whether url != page URL.
The second example in our docs was supposed to exactly model this case (the 14th page refers to a stub post from the first page).
author
and date
are currently required regardless in our validation rules. That’s mostly to prevent an extra hop to find this data. You could at least see how knowing the date of the OP could be useful to understanding how stale the comment is. Can you just throw meta elements in there with that data? I wasn’t worried about those fields as much with regards to bloating the page with redundant data.