We’ve migrated our documentation to a new site, which means some URLs have changed.
Audience

How Do I Set Accurate Article Publish Times for Piano Crawling, Insight, and Recommendations?

How Does Piano Determine Publish Time (and Why Can It Look Wrong)?

When an article does not provide a usable publication date, Piano typically defaults to:

  • The first successful crawl time (common for recommendations and age filters), or

  • The last fetch/crawl time when a date exists but is incorrectly formatted or not parseable.

This can lead to issues such as:

  • Articles older than your module's max-age still appearing.

  • Old articles resurfacing as "new" after being recrawled (e.g., traffic spikes).

Which Meta Tags Should I Use for Publish Time?

For Recommendations and Age Filtering: cXenseParse:recs:publishtime

Use this when you need publish time to drive recommendation logic (including "trend" matching pools) and freshness filters.

<meta name="cXenseParse:recs:publishtime" content="2023-10-05T13:00:00Z"/>

Format requirements:

  • Use ISO 8601: yyyy-MM-ddTHH:mm:ssZ

  • Use UTC time (Z).

  • Use the original publication date/time, not the last updated time.

If you change content and want it reflected without changing the original publication date, use a modified time tag (see this Section) rather than overwriting publish time.

For Content Profiles and Broader Availability: cXenseParse:publishtime and/or article:published_time

If you want the publish time to be available in the document's content profile (for use beyond recommendation-only logic), include:

<meta name="cXenseParse:publishtime" content="2023-10-05T13:00:00Z"/>

Many implementations also include Open Graph publish time:

<meta property="article:published_time" content="2023-10-05T13:00:00Z"/>

Important behavioral difference:

  • cXenseParse:recs:publishtime is intended for recommendations and may not appear in the general content profile in the same way other fields do.

  • article:published_time is commonly indexed into the content profile and can be useful when you need the date visible/usable outside recommendation-only flows.

If you want consistent behavior across modules and reporting, provide both:

  • cXenseParse:recs:publishtime (recommendations/filters)

  • cXenseParse:publishtime or article:published_time (profile/reporting)

How Do I Help Piano Detect Content Updates?

To help Piano detect content/metadata changes and recrawl more reliably, include a modified time tag and update it whenever the article changes:

<meta property="article:modified_time" content="2023-10-06T06:51:49.000Z"/>

This is especially useful when:

  • You are fixing metadata (tags, images, titles, etc.).

  • You need changes reflected quickly without altering the original publish time.

How Do I Prevent Non-Article Pages from Being Recommended?

Pages like author profiles, section fronts, or other evergreen pages often don't have meaningful publish dates and can pollute recommendation pools.

To exclude them, classify them appropriately. For example:

<meta name="cXenseParse:pageclass" content="frontpage"/>

Also ensure non-article pages are not marked as articles in Open Graph (for example, avoid og:type=article on section fronts).

What Happens After I Change Meta Tags?

Adding or correcting publish/modified time tags does not retroactively update already-indexed documents until they are crawled again.

Recrawl Options

  • Full site recrawl: Best when you've changed templates or site-wide markup. Done by Piano Support.

  • Targeted recrawl: Submit a list of URLs when only specific articles need updates.

Recrawl duration depends on site size and crawl capacity. Coordinate timing to minimize impact on your origin servers, and adjust crawl rate if needed.

Manual recrawl via the Insights UI (single page)

Use this option for one-off recrawls of individual URLs.

  1. Log in to Piano Insights at: https://audience-insight.piano.io/

  2. Navigate to Content → Page Statistics → Page Management

  3. Search for or enter the URL you want to recrawl

  4. Click Page Administrator

  5. Click Schedule Refetch

The updated content is typically picked up within minutes.

Targeted recrawl via API (batch / list of URLs)

Use this option when you need to push a list of URLs, for example after updating article content or metadata across a section of your site.

Using the /profile/content/push endpoint:

TOKEN="<API_TOKEN>"
SITE="<SITE_ID>"

while read url; do
  curl -s -X POST "https://api.cxense.com/profile/content/push" \
       -H "Content-Type: application/json" \
       -H "Authorization: Bearer ${TOKEN}" \
       -d "{\"siteId\":\"${SITE}\",\"url\":\"${url}\"}"
  sleep 10
done < urls.txt

Without an Audience API key (using a persisted query):

https://api.cxense.com/profile/content/push?persisted=<PERSISTED_QUERY_ID>&json=<URL_ENCODED_JSON_PAYLOAD>

Where the JSON payload is:

{"url":"https://example.com/article"}

Make sure the payload is URL-encoded before appending it to the request.

How Do I Verify the Indexed Publish Time?

To confirm Piano is using the intended publish time:

  • Inspect the page source to ensure the meta tags are present in the rendered HTML that the crawler can access (paywalls or client-side rendering can sometimes hide tags from the crawler).

  • Use the document search tools/API to validate the stored field used for recommendation filtering.

Querying by Publish Time

When filtering by publication date/time in document queries, use the date-aware field: recs-publishtime.

Example filter:

filter(recs-publishtime < time("2023-10-01T01:00:00Z"))

Avoid filtering on custom string fields for date comparisons, string fields will not behave like dates.

Why Is My Publish Time Wrong? (Troubleshooting Checklist)

  1. No publish time provided

    • Piano uses crawl/fetch time as a fallback.

  2. Publish time present but wrong format

    • Piano may ignore it and fall back to crawl/fetch time. Ensure you are using ISO 8601 format: yyyy-MM-ddTHH:mm:ssZ

  3. HTML is complex / date only in body

    • The crawler may fail to extract the date. Add an explicit meta tag in <head>.

  4. Tags added but no recrawl performed

    • The index still contains old values. Request a recrawl after making changes.

  5. Unexpected old content despite max-age setting

    • Confirm cXenseParse:recs:publishtime is populated and correct, and verify module configuration isn't being overridden by other query/filter settings.

Last updated: