Skip to content

Commit 74fde03

Browse files
committed
Restore FAQ entry and lua script (without documentation note)
- blog/2026-07-26-google-scholar/index.qmd: FAQ entry for Google Scholar - scripts/fix-sitemap.lua: Lua replacement for bash sitemap script - _quarto.yml: Updated to include FAQ in navigation - .gitignore: Updated ignores - Removed scripts/fix-sitemap.sh (replaced by lua)
1 parent 077e79e commit 74fde03

5 files changed

Lines changed: 331 additions & 14 deletions

File tree

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ vendor
1717
*_files/
1818

1919
/.luarc.json
20+
21+
**/*.quarto_ipynb

‎_quarto.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ project:
66
- "site/**/*.qmd"
77
- "blog/**/*.qmd"
88
post-render:
9-
- scripts/fix-sitemap.sh
9+
- scripts/fix-sitemap.lua
1010
website:
1111
title: COMPUTO
1212
site-url: https://computo-journal.org
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
---
2+
title: Google Scholar Indexing
3+
date: '2026-07-26'
4+
description: How Computo ensures Google Scholar indexing and understanding URL selection
5+
categories:
6+
- indexing
7+
- authors
8+
format:
9+
html:
10+
toc: true
11+
page-layout: article
12+
---
13+
14+
## How Computo ensures Google Scholar indexing
15+
16+
Computo is indexed by [Google Scholar](https://scholar.google.com), which means all published articles are discoverable through scholarly search. This page explains how we achieve this and what you can do to verify your article's presence.
17+
18+
## Technical implementation
19+
20+
### Highwire Press meta tags
21+
22+
Google Scholar relies on machine-readable metadata to identify and index scholarly articles. The preferred format is the [Highwire Press](https://www.highwirepress.com/) `citation_*` family of HTML meta tags. At minimum, Google Scholar requires three fields:
23+
24+
1. **`citation_title`** -- the exact title of the paper
25+
2. **`citation_author`** -- the full name of at least the first author (one tag per author)
26+
3. **`citation_publication_date`** or **`citation_year`** -- the publication date
27+
28+
Computo articles also include the following recommended tags for richer indexing:
29+
30+
- `citation_journal_title` -- "Computo"
31+
- `citation_issn` -- "2824-7795"
32+
- `citation_pdf_url` -- link to the article PDF
33+
- `citation_abstract_html_url` -- link to the article landing page
34+
- `citation_doi` -- the article DOI
35+
36+
### The `google-scholar` flag
37+
38+
All Computo article repositories include `google-scholar: true` in their `_quarto.yml` configuration. When this flag is set, the [Computo Quarto extension](https://github.com/computorg/computo-quarto-extension) automatically generates the complete set of Highwire Press meta tags from the article's frontmatter and `citation:` block. This happens at render time -- no manual intervention is needed.
39+
40+
Here is what the configuration looks like in a published article's `_quarto.yml`:
41+
42+
```yaml
43+
google-scholar: true
44+
citation:
45+
title: "Article Title"
46+
author:
47+
- id: author1
48+
name: "Author Name"
49+
affiliation: "Institution"
50+
date: 2024-01-01
51+
doi: "10.57750/xxxxx"
52+
journal: "Computo"
53+
publisher: "French Statistical Society"
54+
ISSN: "2824-7795"
55+
url: "https://computo-journal.org/article-slug/"
56+
pdf: "article-slug.pdf"
57+
abstract: "..."
58+
```
59+
60+
From this, Quarto generates HTML meta tags like:
61+
62+
```html
63+
<meta name="citation_title" content="Article Title">
64+
<meta name="citation_author" content="Author Name">
65+
<meta name="citation_publication_date" content="2024/01/01">
66+
<meta name="citation_journal_title" content="Computo">
67+
<meta name="citation_issn" content="2824-7795">
68+
<meta name="citation_pdf_url" content="https://computo-journal.org/article-slug/article-slug.pdf">
69+
<meta name="citation_doi" content="10.57750/xxxxx">
70+
```
71+
72+
### Additional discoverability features
73+
74+
Beyond meta tags, Computo articles benefit from several features that help Google Scholar's crawlers:
75+
76+
- **Sitemap**: Quarto auto-generates a `sitemap.xml` (thanks to `site-url` being configured in the main site's `_quarto.yml`), which helps search engines discover all article URLs.
77+
- **Open access**: All articles are freely accessible without login walls or paywalls, meeting Google Scholar's requirement for crawlable full text.
78+
- **Stable URLs**: Each article has a permanent URL on `computo-journal.org` and a DOI, ensuring persistent access.
79+
- **Abstract visibility**: The full author-written abstract is clearly visible on each article's landing page.
80+
- **PDF availability**: Each article includes a downloadable PDF linked via `citation_pdf_url`.
81+
82+
## Verifying indexing
83+
84+
### Check if your article is indexed
85+
86+
To verify that a Computo article appears in Google Scholar:
87+
88+
1. Go to [Google Scholar](https://scholar.google.com)
89+
2. Search for the article title in quotes, e.g. `"A Python Package for Sampling from Copulae: Clayton"`
90+
3. Alternatively, search by source: `source:"Computo"` or `site:computo-journal.org`
91+
92+
### Check meta tags on an article page
93+
94+
To verify the meta tags are correctly generated on any published article:
95+
96+
1. Open the article page in a browser
97+
2. Right-click and select "View Page Source" (or press `Ctrl+U` / `Cmd+Option+U`)
98+
3. Search for `citation_` in the HTML source
99+
4. Verify that `citation_title`, `citation_author`, and `citation_publication_date` are present
100+
101+
### Google Rich Results Test
102+
103+
You can also use Google's [Rich Results Test](https://search.google.com/test/rich-results) to check how Google sees a given article URL. Enter the article URL and review the detected structured data.
104+
105+
## Google Scholar inclusion guidelines
106+
107+
For the full official documentation, see Google Scholar's [Inclusion Guidelines for Webmasters](https://scholar.google.com/intl/en/scholar/inclusion.html). Key requirements relevant to Computo:
108+
109+
- Articles must be in HTML or PDF format with searchable text
110+
- Each article must be on a separate URL with a clearly visible abstract
111+
- Bibliographic data must be provided as HTML `<meta>` tags
112+
- The title tag must contain the paper title (not the journal name)
113+
- The author tag must contain only the actual authors
114+
- At least the title, one author, and the publication year must be provided
115+
116+
## Indexing status report
117+
118+
::: {.callout-note}
119+
### Report date: July 2026
120+
The following status was verified by searching Google Scholar for each published article.
121+
:::
122+
123+
### Indexed articles (found on computo-journal.org)
124+
125+
| # | Article | Authors | Year |
126+
|---|---------|---------|------|
127+
| 1 | Optimal projection for parametric importance sampling in high dimensions | El Masri, Morio, Simatos | 2024 |
128+
| 2 | Macrolitter video counting on riverbanks using state space models | Chagneux, Le Corff, Gloaguen, Ollion et al. | 2023 |
129+
| 3 | regMMD: an R package for parametric estimation and regression with MMD | Alquier, Gerber | 2025 |
130+
| 4 | Computing an empirical Fisher information matrix estimate in latent variable models | Delattre, Kuhn | 2023 |
131+
| 5 | Point Process Discrimination According to Repulsion | Adrat, Decreusefond | 2024 |
132+
133+
### Also indexed (via other sources)
134+
135+
| # | Article | Authors | Notes |
136+
|---|---------|---------|-------|
137+
| 6 | A Python Package for Sampling from Copulae: clayton | Boulin | Indexed via arXiv, not directly from computo-journal.org |
138+
| 7 | Visualizing Data using t-SNE (mock) | van der Maaten, Hinton | Mock contribution, indexed from multiple URLs |
139+
140+
### Not yet indexed in Google Scholar
141+
142+
The following 18 published articles were **not found** in Google Scholar as of July 2026:
143+
144+
| # | Article | Authors | Year |
145+
|---|---------|---------|------|
146+
| 1 | Should we correct the bias in Confidence Bands for Repeated Functional Data? | Devijver, Samson | 2026 |
147+
| 2 | Variational inference for approximate objective priors using neural networks | Baillie, Van Biesbroeck, Gauchy | 2025 |
148+
| 3 | Fast confidence bounds for the false discovery proportion | Durand | 2025 |
149+
| 4 | Draw Me a Simulator | Boulet, Chambaz | 2025 |
150+
| 5 | Model-Based Clustering and Variable Selection for Multivariate Count Data | Jacques, Murphy | 2025 |
151+
| 6 | Reservoir Computing in R: a Tutorial | Ferté, Ba, Dutartre et al. | 2025 |
152+
| 7 | Efficient simulation of individual-based population models | Giorgi, Kaakai, Lemaire | 2025 |
153+
| 8 | Spectral Bridges: Scalable Spectral Clustering | Laplante, Ambroise | 2024 |
154+
| 9 | An R Package for Adaptive Conformal Inference | Susmann, Chambaz, Josse | 2024 |
155+
| 10 | Bayesian spatiotemporal modelling of wildfire occurrences | Legrand, Pimont, Dupuy, Opitz | 2024 |
156+
| 11 | Geometric-Based Pruning Rules for Change Point Detection | Pishchagina, Rigaill, Runge | 2024 |
157+
| 12 | PeerAnnot: crowdsourcing for image annotation | Lefort, Charlier, Joly, Salmon | 2024 |
158+
| 13 | A hierarchical model to evaluate pest treatments | Favrot, Makowski | 2024 |
159+
| 14 | Local tree methods for classification | Cleynen, Raynal, Marin | 2023 |
160+
| 15 | Inference of Multiscale Gaussian Graphical Models | Sanou, Ambroise, Robin | 2023 |
161+
| 16 | Trade-off between deep learning for species identification | Gimenez, Kervellec et al. | 2022 |
162+
163+
### Observations
164+
165+
- **Coverage**: Only ~5 out of 25 published articles (20%) are indexed in Google Scholar with computo-journal.org URLs.
166+
- **Older articles more likely indexed**: Articles from 2023--2024 have had more time to be crawled.
167+
- **The 2026 article is not yet indexed**: This is expected given the short time since publication.
168+
- **Some articles indexed via other sources**: The clayton paper is indexed via its arXiv version, not from the Computo landing page.
169+
- **Google Scholar crawling is slow**: It can take months for new content to appear.
170+
171+
## Understanding URL selection by Google Scholar
172+
173+
::: {.callout-important}
174+
### Key finding: Most articles ARE indexed, but under different URLs
175+
Our investigation (July 2026) revealed that articles not found under `computo-journal.org` URLs are often **already indexed in Google Scholar under preprint server URLs** (arXiv, HAL, OpenReview, etc.).
176+
:::
177+
178+
### Why does this happen?
179+
180+
1. **Authors post preprints early**: Many authors deposit preprints on arXiv, HAL, or submit to conferences (OpenReview) before or during journal review.
181+
2. **Google Scholar discovers preprints first**: Google Scholar crawls preprint servers regularly and indexes papers when first discovered.
182+
3. **First URL wins**: Google Scholar typically associates the metadata with the **first URL it finds**, which is usually the preprint.
183+
4. **Merging is not automatic**: Even after journal publication, Google Scholar may not automatically merge the preprint and journal versions.
184+
185+
### Examples from Computo
186+
187+
| Article | Indexed URL | Source |
188+
|---------|-------------|--------|
189+
| Spectral Bridges (Laplante, 2024) | `arxiv.org/abs/2407.07430` | arXiv preprint |
190+
| Draw Me a Simulator (Boulet, 2025) | `openreview.net/forum?id=WgNljqj0GH` | OpenReview |
191+
| Local tree methods (Cleynen, 2023) | `hal.science/hal-04590982/` | HAL repository |
192+
| Hierarchical model (Favrot, 2024) | `hal.science/hal-04501913/` | HAL repository |
193+
| clayton (Boulin, 2023) | `arxiv.org/abs/...` | arXiv preprint |
194+
195+
**Indexed via computo-journal.org** (no preprint found):
196+
- El Masri et al. (2024) — importance sampling
197+
- Chagneux et al. (2023) — macrolitter detection
198+
199+
### What authors can do
200+
201+
If you want your Computo article to appear under the journal URL in Google Scholar:
202+
203+
1. **Update your preprint record**: Add the journal DOI and a link to the published version on your preprint (arXiv, HAL, etc.).
204+
2. **Use the published version flag**: On arXiv, use the "Journal ref" field when updating your submission.
205+
3. **Suggest a correction to Google Scholar**: Use [Google Scholar's suggestion form](https://scholar.google.com/intl/en/scholar/inclusion.html) to request merging versions.
206+
4. **Cite the journal version**: When citing your own work, use the computo-journal.org URL and DOI.
207+
208+
### Recommendations
209+
210+
1. **Be patient**: Google Scholar typically takes 2--6 months to index new scholarly content.
211+
2. **Submit to Google Scholar directly**: Authors can suggest their article for inclusion via [Google Scholar's suggestion form](https://scholar.google.com/intl/en/scholar/inclusion.html).
212+
3. **Ensure cross-linking**: Articles should be cited by other indexed papers to improve discovery.
213+
4. **Consider registering with CrossRef**: DOIs registered with CrossRef improve metadata propagation to scholarly databases.
214+
5. **Update preprint records**: If you have a preprint, update it with the journal DOI and published URL.
215+
216+
## Troubleshooting
217+
218+
If an article is not appearing in Google Scholar despite being published:
219+
220+
1. **Check for preprint versions**: Search Google Scholar for the article title — it may be indexed under a preprint URL (arXiv, HAL, OpenReview) instead of computo-journal.org.
221+
2. **Wait**: Google Scholar's crawlers may take several weeks to index new content
222+
3. **Verify meta tags**: Check the HTML source of the article page for `citation_*` tags
223+
4. **Check robots.txt**: Ensure `computo-journal.org/robots.txt` does not block the article path
224+
5. **Verify PDF accessibility**: The PDF must be publicly accessible without authentication
225+
6. **Contact us**: If issues persist, reach out at <contact@computo-journal.org>

‎scripts/fix-sitemap.lua‎

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#!/usr/bin/env lua
2+
-- Post-render script to fix and enhance sitemap.xml
3+
-- Handles two tasks:
4+
-- 1. Fix Quarto's /index.html URLs to trailing-slash form
5+
-- 2. Add published article URLs from published.yml to sitemap
6+
--
7+
-- Quarto bug: https://github.com/quarto-dev/quarto-cli/discussions/11398
8+
9+
local output_dir = os.getenv("QUARTO_PROJECT_OUTPUT_DIR") or "_site"
10+
local sitemap_path = output_dir .. "/sitemap.xml"
11+
local published_yml_path = "site/published.yml"
12+
13+
-- Read file contents
14+
local function read_file(path)
15+
local file = io.open(path, "r")
16+
if not file then
17+
return nil
18+
end
19+
local content = file:read("*a")
20+
file:close()
21+
return content
22+
end
23+
24+
-- Write content to file
25+
local function write_file(path, content)
26+
local file = io.open(path, "w")
27+
if not file then
28+
error("Cannot write to " .. path)
29+
end
30+
file:write(content)
31+
file:close()
32+
end
33+
34+
-- Extract article URLs from published.yml
35+
-- Uses the repo: field (e.g., published-202402-elmasri-optimal) to construct URLs
36+
local function extract_article_urls(yml_content)
37+
local urls = {}
38+
local seen = {}
39+
for line in yml_content:gmatch("[^\r\n]+") do
40+
local repo = line:match("^%s- repo: (published-[%w%-]+)")
41+
if repo and not seen[repo] then
42+
local url = "https://computo-journal.org/" .. repo .. "/"
43+
table.insert(urls, url)
44+
seen[repo] = true
45+
end
46+
end
47+
return urls
48+
end
49+
50+
-- Check if URL already exists in sitemap
51+
local function url_exists_in_sitemap(sitemap_content, url)
52+
return sitemap_content:find("<loc>" .. url .. "</loc>", 1, true) ~= nil
53+
end
54+
55+
-- Main logic
56+
local sitemap_content = read_file(sitemap_path)
57+
if not sitemap_content then
58+
print("No sitemap.xml found, skipping")
59+
os.exit(0)
60+
end
61+
62+
local modified = false
63+
64+
-- Task 1: Fix /index.html URLs to trailing-slash form
65+
local fixed_content = sitemap_content:gsub("/index%.html</loc>", "/</loc>")
66+
if fixed_content ~= sitemap_content then
67+
sitemap_content = fixed_content
68+
modified = true
69+
print("Fixed /index.html URLs to trailing-slash form")
70+
end
71+
72+
-- Task 2: Add article URLs from published.yml
73+
local yml_content = read_file(published_yml_path)
74+
if yml_content then
75+
local article_urls = extract_article_urls(yml_content)
76+
local lastmod = os.date("!%Y-%m-%dT%H:%M:%SZ")
77+
78+
for _, url in ipairs(article_urls) do
79+
if not url_exists_in_sitemap(sitemap_content, url) then
80+
-- Insert URL before </urlset>
81+
local entry = string.format(
82+
' <url>\n <loc>%s</loc>\n <lastmod>%s</lastmod>\n </url>\n',
83+
url, lastmod
84+
)
85+
sitemap_content = sitemap_content:gsub("</urlset>", entry .. "</urlset>")
86+
modified = true
87+
end
88+
end
89+
90+
if #article_urls > 0 then
91+
print("Added " .. #article_urls .. " article URLs to sitemap")
92+
end
93+
else
94+
print("No published.yml found, skipping article URLs")
95+
end
96+
97+
-- Write updated sitemap
98+
if modified then
99+
write_file(sitemap_path, sitemap_content)
100+
print("Updated sitemap.xml")
101+
else
102+
print("No changes needed")
103+
end

‎scripts/fix-sitemap.sh‎

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)