Making blog posts harvestable by Zotero and preserving case in citation fields
This is a quick "how-to" post because I learned something about Zotero. I want the posts on this site to be easily citeable. The name of the site that I would like in citations is "eve.gd: Martin Paul Eve". But here's the problem: when you put that as a Blog Title (or Website Title) and then go to cite it in a document, the CSL reformats it to the ugly "Eve.Gd: Martin Paul Eve". Anyway, I found how to fix this! You simply encode it thus:
<span class="nocase">eve.gd</span>: Martin Paul Eve
Then the CSL will preserve your original case. <span class="nocase">bell hooks</span> might have found this useful, as might <span class="nocase">andré carrington</span>.
Mind you, those two are jokes only, as Zotero automatically preserves the casing of author names.
The next challenge that I faced was: how do you get an item into Zotero with the "Blog Post" type when you are running a static-site generator? Well, obviously, you have to embed meta tags, but which ones?
The key: force the item type with zotero:itemType
Genre/OpenGraph hints alone are unreliable — prism.genre=blogentry is supposed to map to Blog Post, but in practice Zotero kept importing posts as Web Page (the OpenGraph default won). The dependable fix is Zotero's own RDFa override, zotero:itemType, which is read first in the translator's type precedence (t.zotero || t.bib || t.prism || … || t.og || … in RDF.js) and beats everything else.
Two parts are required, because zotero is not a built-in prefix in the translator (only the short z is), so it must be declared:
-
Declare the prefix on the
<html>element (the translator'sgetPrefixesreads theprefixattribute of<html>and<head>):<html lang="en" prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article# zotero: http://www.zotero.org/namespaces/export#"> -
Emit the override (note
property=, notname=):<meta property="zotero:itemType" content="blogPost">
The prefix value is RDFa syntax: prefix: uri pairs separated by spaces (a space after each colon is required by the parser's (\w+):\s+(\S+) regex).
Required tags
| Tag | Value | Effect |
|---|---|---|
<html prefix="…zotero: http://www.zotero.org/namespaces/export#"> |
(declaration) | Registers the zotero prefix so the next tag is understood. |
zotero:itemType (property) |
blogPost |
Forces item type → Blog Post. Highest-priority signal. |
prism.publicationName |
<span class="nocase">eve.gd</span>: Martin Paul Eve |
Blog Title. Read before og:site_name. The <span class="nocase"> is CSL markup so styles don't title-case eve.gd into Eve.Gd. |
og:title |
post title | Title. Use OpenGraph/dc.title, not citation_title (see below). |
citation_author |
Eve, Martin Paul |
Author (Last, First; repeat for multiple). |
citation_publication_date |
2022/07/26 |
Date (YYYY/MM/DD). |
citation_doi |
10.59348/kv1zh-wn208 |
DOI (bare, not a URL). |
citation_public_url |
https://eve.gd/2022/07/26/.../ |
URL (absolute). |
citation_language |
en |
Language. |
Secondary / belt-and-braces
| Tag | Purpose |
|---|---|
prism.genre = blogentry |
Secondary type hint (kept in case zotero:itemType is ever ignored). |
dc.title / dc.creator / dc.date / dc.language |
Dublin Core fallbacks for other reference tools. |
Tags to AVOID for a blog post
| Tag | Problem |
|---|---|
citation_journal_title |
Forces the journalArticle type. |
citation_title |
Makes the translator guess journalArticle. Supply the title via og:title / dc.title instead. |
Notes
og:site_namestays clean (eve.gd: Martin Paul Eve, no markup) because it also drives social-card previews; the case-protected title rides inprism.publicationName, which Zotero reads first.<span class="nocase">…</span>is one of Zotero's allowed rich-text tags, so it survives import; Zotero's item pane may show the raw markup in the field even though citations render correctly.- After changing these tags, Reset Translators in Zotero (Preferences → Advanced) and test on the deployed page, since the connector caches translators.
So this should now work!
I must also add my thanks to Tom Elliott, whose own blog post on this subject gave me the information I needed to get the Blog Post type working. It is a shame that he stopped posting on his blog in 2020. I hope all is OK with him, but there are lots of interesting digital humanities posts on his site, on eclectic topics.
Making blog posts harvestable by Zotero and preserving case in citation fields was originally published by Martin Paul Eve at Martin Paul Eve on June 23, 2026.
Additional details
Description
This is a quick "how-to" post because I learned something about Zotero. I want the posts on this site to be easily citeable. The name of the site that I would like in citations is "eve.gd: Martin Paul Eve". But here's the problem: when you put that as a Blog Title (or Website Title) and then go to cite it in a document, the CSL reformats it to the ugly "Eve.Gd: Martin Paul Eve". Anyway, I found how to fix this!
Identifiers
- GUID
- https://doi.org/10.59348/vrt01-f3b49
- URL
- https://eve.gd/2026/06/23/making-blog-posts-harvestable-by-zotero-and-preserving-case-in-citation-fields/
Dates
- Issued
-
2026-06-23T15:55:58
- Updated
-
2026-06-23T15:55:58