Rank Math’s Schema Freshness Gap: Why Your Article Dates Might Be Invisible to AI Search
By Tim Dini | March 2026 | Field Notes
I wasn’t looking for this. I was configuring Rank Math Pro on my AEO Guide, checking the schema output to make sure everything was in order, and I noticed something that stopped me cold.
The Article schema node had no dates. No datePublished. No dateModified. Nothing.
The dates existed on the page. Rank Math was generating them. But they were on the wrong schema node for a significant chunk of the AI systems I was trying to reach. And if I hadn’t been reading the raw JSON-LD output line by line, I never would have caught it.
This is what building a site in public actually looks like. You configure a tool you trust, you check the output instead of assuming it works, and sometimes you find something that changes how you think about the whole stack.
What I Expected vs. What I Found
Every SEO plugin worth using generates schema markup, the structured data that tells search engines (and AI crawlers) what your content is, who wrote it, when it was published, and when it was last updated.
Content freshness is a big deal for AI citations. When an AI system decides which sources to reference in its answers, recency is one of the top ranking factors. Two pages answering the same question, one updated last week, one with no date at all? The dated content wins. Consistently.
So when I pulled up the schema output for my AEO Guide, I expected to see datePublished and dateModified right there on the Article node where any AI crawler could grab them.
Instead, the Article node was dateless.
Where Rank Math Actually Puts the Dates
Here’s what’s happening under the hood. Rank Math Pro generates a JSON-LD schema graph with multiple connected nodes. The two that matter here are WebPage and Article. They’re linked through a property called mainEntity, which tells systems that the WebPage contains this Article as its primary content.
Rank Math puts datePublished and dateModified on the WebPage node. The Article node connects back to it through mainEntity / isPartOf references.
Now, I need to be precise here because this matters: Rank Math’s behavior isn’t always the same across every configuration. Digging through their support forums, I found cases where dates DO appear on the Article node in certain setups. What I’m describing is what I found in my specific configuration (Rank Math Pro, Advanced mode, Article schema type on a WordPress page). Your output might be different. The only way to know is to check yours, which I’ll show you how to do below.
In my case, the dates lived exclusively on the WebPage node.
Why This Is a Problem for AI Search
If you’re Google, the WebPage-only approach isn’t a problem. Google’s systems are sophisticated enough to follow the mainEntity connection between nodes, find the WebPage, and pull the dates from there. Google sees your freshness signals just fine regardless of which node they’re on.
But Google isn’t the only system reading your schema anymore. And this is where AEO gets complicated.
AI crawlers vary wildly in how they process structured data. Google resolves linked data references across schema nodes. But the RAG (Retrieval-Augmented Generation) systems powering tools like Perplexity, ChatGPT’s browsing mode, and Claude’s web access? Many of them work differently. These systems often extract schema data from the specific node they’re evaluating. They find your Article node, look for dates, don’t see any, and move on.
Your content just became undated to every AI system that doesn’t trace cross-node references.
Think about what that means. You wrote a guide, kept it updated, did everything right for freshness signals, and a significant portion of the AI systems evaluating your content for citation can’t see any of it. Not because your content is old. Because the dates are on a different schema node than the one those systems check.
How to Check Your Own Schema Output
Before you do anything, check what your site is actually generating. Don’t assume your configuration matches mine.
Option 1: Google’s Rich Results Test. Go to search.google.com/test/rich-results, enter your URL, and examine the detected schema entities. Look specifically at the Article entity and check whether datePublished and dateModified appear on it.
Option 2: View the raw JSON-LD. Right-click on your page, click “View Page Source,” and search for application/ld+json. Find the Article node (look for "@type": "Article") and check whether it contains date properties directly.
Option 3: Schema Markup Validator. Go to validator.schema.org, paste your URL, and examine the parsed output. This shows you exactly what each node contains.
If your Article node has dates on it, you’re fine. Move on. Seriously. Don’t fix what isn’t broken.
If your Article node is dateless (like mine was), keep reading.
The Fix
I wrote a code snippet that hooks into Rank Math’s Article schema filter and adds datePublished and dateModified directly to the Article entity. It pulls the values from the post’s actual publish and modified dates in WordPress. It doesn’t touch the WebPage node (those dates should stay for Google). It just duplicates them where simpler AI systems actually look.
Here’s the code. This goes in a site-specific plugin (recommended) or your theme’s functions.php file. Rank Math also supports a dedicated rank-math.php file in your theme folder that only runs when the plugin is active, which is a cleaner approach if you’re comfortable with FTP.
/**
* Add datePublished and dateModified to the Article schema entity.
*
* Some Rank Math configurations place dates only on the WebPage node.
* Sophisticated systems (Google) follow cross-node references and find
* them. Simpler AI crawlers and RAG systems check the Article node
* directly, miss the dates, and treat the content as undated.
*
* This filter adds dates to the Article entity without removing them
* from WebPage. Belt and suspenders.
*
* Works with Rank Math Pro. Test your output before and after.
*/
add_filter( 'rank_math/snippet/rich_snippet_article_entity', function( $entity ) {
if ( ! is_singular() || ! get_the_ID() ) {
return $entity;
}
$post_id = get_the_ID();
$date_published = get_the_date( 'c', $post_id );
$date_modified = get_the_modified_date( 'c', $post_id );
if ( $date_published ) {
$entity['datePublished'] = $date_published;
}
if ( $date_modified ) {
$entity['dateModified'] = $date_modified;
}
return $entity;
});
After adding the code: Run your page through the Rich Results Test or Schema Validator again. You should now see datePublished and dateModified on both the WebPage node (where Rank Math puts them) and the Article node (where your new code adds them). Both nodes, both systems, no gaps.
A note on the filter hook: rank_math/snippet/rich_snippet_article_entity is a documented Rank Math filter specifically for modifying the Article schema entity. If you’re using a different schema type (like BlogPosting or NewsArticle), the filter name follows the pattern rank_math/snippet/rich_snippet_{schema_type}_entity. Check Rank Math’s filter documentation for specifics.
The Bigger Pattern
This is the thing I keep running into while building this site. The gap between “valid schema” and “schema that works across all AI systems” is real, and almost nobody is talking about it.
Your schema markup can validate perfectly. It can score 100% on every testing tool. And it can still be functionally incomplete for the AI systems you’re actually trying to reach.
The tools we use (Rank Math, Yoast, All in One SEO) were built when Google was the only system that mattered. They’re good tools. I use Rank Math Pro on this site and I’m not switching. But their defaults and assumptions were designed for a world where one sophisticated crawler handled all the heavy lifting. That world is ending.
If you’re serious about answer engine optimization, you can’t just install a plugin, check the green lights, and move on. You have to look at the actual output and ask: “Does this work for every system that might be reading it, or just the most sophisticated one?”
Think about it like plumbing. A fitting can be code-compliant and still leak if the conditions aren’t what the manufacturer assumed. The spec sheet says it works. The water on your floor says otherwise. You fix it by understanding the actual conditions, not by pointing at the spec sheet.
I’ll keep finding these gaps as I build this site. That’s the whole point of the Field Notes series. I find them, I write them up, you skip the part where you discover them the hard way.
If you want the monthly roundup of what matters in AI search (shorter, wider, same honesty), that’s The Punch List.
Have a schema question? Reply to any Punch List email. I read every one.
