Skip to content

SCIX-877 feat(meta_tags): gate Google Scholar tags by doctype, add JSON-LD#2379

Merged
thostetler merged 3 commits into
adsabs:masterfrom
thostetler:SCIX-877-google-scholar-doctypes
Jul 17, 2026
Merged

SCIX-877 feat(meta_tags): gate Google Scholar tags by doctype, add JSON-LD#2379
thostetler merged 3 commits into
adsabs:masterfrom
thostetler:SCIX-877-google-scholar-doctypes

Conversation

@thostetler

Copy link
Copy Markdown
Member

Google Scholar-compatible citation_* meta tags were emitted on every abstract page regardless of doctype. Per SCIX-877 only a defined set of doctypes should expose them; non-scholarly doctypes (proposal, dataset, software, misc, pressrelease, catalog, talk, service, instrument) should not. BBB also lacked any Schema.org structured data.

  • Added a doctype whitelist and showsGoogleScholarTags predicate (scholar_doctypes.js), matched case-insensitively
  • Gated the citation_* tags in the meta_tags template behind showScholarTags
  • Added a lean Schema.org ScholarlyArticle JSON-LD builder (jsonld.js), emitted for all records, injected as a single idempotent script[data-ads-jsonld] node in the head
  • Built JSON-LD from the raw record before the widget reshapes author and flattens doi, and hardened author handling for reprocessed records
  • Added doctype to the default fl so it is available for gating
  • Added mocha coverage for gating and JSON-LD emission

…ON-LD

Google Scholar-compatible citation_* meta tags were emitted on every
abstract page. Per SCIX-877 only an allowed whitelist of doctypes should
expose them. This also adds a Schema.org ScholarlyArticle JSON-LD block,
which BBB previously lacked, emitted for all records.

- Added a doctype whitelist and showsGoogleScholarTags predicate
  (scholar_doctypes.js), matched case-insensitively
- Gated the citation_* tags in the template behind showScholarTags
- Added a lean JSON-LD builder (jsonld.js) and injected a single
  idempotent script[data-ads-jsonld] node into the head
- Built JSON-LD from the raw record before the widget reshapes author and
  flattens doi; hardened author handling for reprocessed records
- Added doctype to the default fl so it is available for gating
- Added mocha coverage for gating and JSON-LD emission
- Derive isAccessibleForFree from the OPENACCESS property instead of always true
- Strip ADS -00 placeholders so datePublished is valid ISO 8601
- Remove the stale JSON-LD script on route change alongside the meta tags
@thostetler
thostetler marked this pull request as ready for review July 15, 2026 18:08
Copilot AI review requested due to automatic review settings July 15, 2026 18:08
@thostetler
thostetler requested a review from shinyichen July 15, 2026 18:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the meta-tags widget to (1) restrict Google Scholar-compatible citation_* meta tags to a doctype allowlist and (2) emit Schema.org ScholarlyArticle JSON-LD for all records. This aligns abstract-page metadata with SCIX-877 requirements while adding structured data support.

Changes:

  • Added a doctype allowlist + predicate to gate citation_* tags.
  • Added a JSON-LD builder and injected a single idempotent application/ld+json block into <head>.
  • Expanded widget fl fields to include doctype and added mocha coverage for gating + JSON-LD behavior.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/js/widgets/meta_tags/widget.js Adds doctype-based gating and JSON-LD generation/injection in updateMetaTags, plus fetches doctype.
src/js/widgets/meta_tags/template/metatags.html Wraps citation_* meta tags in showScholarTags conditionals.
src/js/widgets/meta_tags/scholar_doctypes.js Introduces the Google Scholar doctype whitelist and case-insensitive predicate.
src/js/widgets/meta_tags/jsonld.js Implements lean Schema.org ScholarlyArticle JSON-LD generation from raw records.
src/js/components/navigator.js Clears JSON-LD head node on navigation alongside existing meta-tag cleanup.
test/mocha/js/widgets/meta_tags_widget.spec.js Adds tests for doctype gating and JSON-LD emission/idempotency.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +143 to +147
// Replace any prior JSON-LD node so repeated invocations (search
// results + abstract display) leave exactly one block, reflecting the
// most recently displayed record.
$('head')
.find('script[type="application/ld+json"][data-ads-jsonld]')
Per Copilot review on adsabs#2379: the append-if-absent logic could leave stale
citation_* tags in <head> when a later record's doctype omits them. Clear
the widget's data-highwire tags before rendering so the current record is
authoritative, instead of relying on the navigator's route-change cleanup.
@thostetler
thostetler merged commit 458918e into adsabs:master Jul 17, 2026
1 check passed
@thostetler
thostetler deleted the SCIX-877-google-scholar-doctypes branch July 17, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants