diff --git a/.gitignore b/.gitignore
index 634fbde..7555550 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@ vendor
*_files/
/.luarc.json
+
+**/*.quarto_ipynb
diff --git a/_quarto.yml b/_quarto.yml
index 3d4a444..c24c4e9 100644
--- a/_quarto.yml
+++ b/_quarto.yml
@@ -6,7 +6,7 @@ project:
- "site/**/*.qmd"
- "blog/**/*.qmd"
post-render:
- - scripts/fix-sitemap.sh
+ - scripts/fix-sitemap.lua
website:
title: COMPUTO
site-url: https://computo-journal.org
diff --git a/blog/2026-07-26-google-scholar/index.qmd b/blog/2026-07-26-google-scholar/index.qmd
new file mode 100644
index 0000000..c7faa5f
--- /dev/null
+++ b/blog/2026-07-26-google-scholar/index.qmd
@@ -0,0 +1,225 @@
+---
+title: Google Scholar Indexing
+date: '2026-07-26'
+description: How Computo ensures Google Scholar indexing and understanding URL selection
+categories:
+ - indexing
+ - authors
+format:
+ html:
+ toc: true
+page-layout: article
+---
+
+## How Computo ensures Google Scholar indexing
+
+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.
+
+## Technical implementation
+
+### Highwire Press meta tags
+
+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:
+
+1. **`citation_title`** -- the exact title of the paper
+2. **`citation_author`** -- the full name of at least the first author (one tag per author)
+3. **`citation_publication_date`** or **`citation_year`** -- the publication date
+
+Computo articles also include the following recommended tags for richer indexing:
+
+- `citation_journal_title` -- "Computo"
+- `citation_issn` -- "2824-7795"
+- `citation_pdf_url` -- link to the article PDF
+- `citation_abstract_html_url` -- link to the article landing page
+- `citation_doi` -- the article DOI
+
+### The `google-scholar` flag
+
+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.
+
+Here is what the configuration looks like in a published article's `_quarto.yml`:
+
+```yaml
+google-scholar: true
+citation:
+ title: "Article Title"
+ author:
+ - id: author1
+ name: "Author Name"
+ affiliation: "Institution"
+ date: 2024-01-01
+ doi: "10.57750/xxxxx"
+ journal: "Computo"
+ publisher: "French Statistical Society"
+ ISSN: "2824-7795"
+ url: "https://computo-journal.org/article-slug/"
+ pdf: "article-slug.pdf"
+ abstract: "..."
+```
+
+From this, Quarto generates HTML meta tags like:
+
+```html
+
+
+
+
+
+
+
+```
+
+### Additional discoverability features
+
+Beyond meta tags, Computo articles benefit from several features that help Google Scholar's crawlers:
+
+- **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.
+- **Open access**: All articles are freely accessible without login walls or paywalls, meeting Google Scholar's requirement for crawlable full text.
+- **Stable URLs**: Each article has a permanent URL on `computo-journal.org` and a DOI, ensuring persistent access.
+- **Abstract visibility**: The full author-written abstract is clearly visible on each article's landing page.
+- **PDF availability**: Each article includes a downloadable PDF linked via `citation_pdf_url`.
+
+## Verifying indexing
+
+### Check if your article is indexed
+
+To verify that a Computo article appears in Google Scholar:
+
+1. Go to [Google Scholar](https://scholar.google.com)
+2. Search for the article title in quotes, e.g. `"A Python Package for Sampling from Copulae: Clayton"`
+3. Alternatively, search by source: `source:"Computo"` or `site:computo-journal.org`
+
+### Check meta tags on an article page
+
+To verify the meta tags are correctly generated on any published article:
+
+1. Open the article page in a browser
+2. Right-click and select "View Page Source" (or press `Ctrl+U` / `Cmd+Option+U`)
+3. Search for `citation_` in the HTML source
+4. Verify that `citation_title`, `citation_author`, and `citation_publication_date` are present
+
+### Google Rich Results Test
+
+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.
+
+## Google Scholar inclusion guidelines
+
+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:
+
+- Articles must be in HTML or PDF format with searchable text
+- Each article must be on a separate URL with a clearly visible abstract
+- Bibliographic data must be provided as HTML `` tags
+- The title tag must contain the paper title (not the journal name)
+- The author tag must contain only the actual authors
+- At least the title, one author, and the publication year must be provided
+
+## Indexing status report
+
+::: {.callout-note}
+### Report date: July 2026
+The following status was verified by searching Google Scholar for each published article.
+:::
+
+### Indexed articles (found on computo-journal.org)
+
+| # | Article | Authors | Year |
+|---|---------|---------|------|
+| 1 | Optimal projection for parametric importance sampling in high dimensions | El Masri, Morio, Simatos | 2024 |
+| 2 | Macrolitter video counting on riverbanks using state space models | Chagneux, Le Corff, Gloaguen, Ollion et al. | 2023 |
+| 3 | regMMD: an R package for parametric estimation and regression with MMD | Alquier, Gerber | 2025 |
+| 4 | Computing an empirical Fisher information matrix estimate in latent variable models | Delattre, Kuhn | 2023 |
+| 5 | Point Process Discrimination According to Repulsion | Adrat, Decreusefond | 2024 |
+
+### Also indexed (via other sources)
+
+| # | Article | Authors | Notes |
+|---|---------|---------|-------|
+| 6 | A Python Package for Sampling from Copulae: clayton | Boulin | Indexed via arXiv, not directly from computo-journal.org |
+| 7 | Visualizing Data using t-SNE (mock) | van der Maaten, Hinton | Mock contribution, indexed from multiple URLs |
+
+### Not yet indexed in Google Scholar
+
+The following 18 published articles were **not found** in Google Scholar as of July 2026:
+
+| # | Article | Authors | Year |
+|---|---------|---------|------|
+| 1 | Should we correct the bias in Confidence Bands for Repeated Functional Data? | Devijver, Samson | 2026 |
+| 2 | Variational inference for approximate objective priors using neural networks | Baillie, Van Biesbroeck, Gauchy | 2025 |
+| 3 | Fast confidence bounds for the false discovery proportion | Durand | 2025 |
+| 4 | Draw Me a Simulator | Boulet, Chambaz | 2025 |
+| 5 | Model-Based Clustering and Variable Selection for Multivariate Count Data | Jacques, Murphy | 2025 |
+| 6 | Reservoir Computing in R: a Tutorial | Ferté, Ba, Dutartre et al. | 2025 |
+| 7 | Efficient simulation of individual-based population models | Giorgi, Kaakai, Lemaire | 2025 |
+| 8 | Spectral Bridges: Scalable Spectral Clustering | Laplante, Ambroise | 2024 |
+| 9 | An R Package for Adaptive Conformal Inference | Susmann, Chambaz, Josse | 2024 |
+| 10 | Bayesian spatiotemporal modelling of wildfire occurrences | Legrand, Pimont, Dupuy, Opitz | 2024 |
+| 11 | Geometric-Based Pruning Rules for Change Point Detection | Pishchagina, Rigaill, Runge | 2024 |
+| 12 | PeerAnnot: crowdsourcing for image annotation | Lefort, Charlier, Joly, Salmon | 2024 |
+| 13 | A hierarchical model to evaluate pest treatments | Favrot, Makowski | 2024 |
+| 14 | Local tree methods for classification | Cleynen, Raynal, Marin | 2023 |
+| 15 | Inference of Multiscale Gaussian Graphical Models | Sanou, Ambroise, Robin | 2023 |
+| 16 | Trade-off between deep learning for species identification | Gimenez, Kervellec et al. | 2022 |
+
+### Observations
+
+- **Coverage**: Only ~5 out of 25 published articles (20%) are indexed in Google Scholar with computo-journal.org URLs.
+- **Older articles more likely indexed**: Articles from 2023--2024 have had more time to be crawled.
+- **The 2026 article is not yet indexed**: This is expected given the short time since publication.
+- **Some articles indexed via other sources**: The clayton paper is indexed via its arXiv version, not from the Computo landing page.
+- **Google Scholar crawling is slow**: It can take months for new content to appear.
+
+## Understanding URL selection by Google Scholar
+
+::: {.callout-important}
+### Key finding: Most articles ARE indexed, but under different URLs
+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.).
+:::
+
+### Why does this happen?
+
+1. **Authors post preprints early**: Many authors deposit preprints on arXiv, HAL, or submit to conferences (OpenReview) before or during journal review.
+2. **Google Scholar discovers preprints first**: Google Scholar crawls preprint servers regularly and indexes papers when first discovered.
+3. **First URL wins**: Google Scholar typically associates the metadata with the **first URL it finds**, which is usually the preprint.
+4. **Merging is not automatic**: Even after journal publication, Google Scholar may not automatically merge the preprint and journal versions.
+
+### Examples from Computo
+
+| Article | Indexed URL | Source |
+|---------|-------------|--------|
+| Spectral Bridges (Laplante, 2024) | `arxiv.org/abs/2407.07430` | arXiv preprint |
+| Draw Me a Simulator (Boulet, 2025) | `openreview.net/forum?id=WgNljqj0GH` | OpenReview |
+| Local tree methods (Cleynen, 2023) | `hal.science/hal-04590982/` | HAL repository |
+| Hierarchical model (Favrot, 2024) | `hal.science/hal-04501913/` | HAL repository |
+| clayton (Boulin, 2023) | `arxiv.org/abs/...` | arXiv preprint |
+
+**Indexed via computo-journal.org** (no preprint found):
+- El Masri et al. (2024) — importance sampling
+- Chagneux et al. (2023) — macrolitter detection
+
+### What authors can do
+
+If you want your Computo article to appear under the journal URL in Google Scholar:
+
+1. **Update your preprint record**: Add the journal DOI and a link to the published version on your preprint (arXiv, HAL, etc.).
+2. **Use the published version flag**: On arXiv, use the "Journal ref" field when updating your submission.
+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.
+4. **Cite the journal version**: When citing your own work, use the computo-journal.org URL and DOI.
+
+### Recommendations
+
+1. **Be patient**: Google Scholar typically takes 2--6 months to index new scholarly content.
+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).
+3. **Ensure cross-linking**: Articles should be cited by other indexed papers to improve discovery.
+4. **Consider registering with CrossRef**: DOIs registered with CrossRef improve metadata propagation to scholarly databases.
+5. **Update preprint records**: If you have a preprint, update it with the journal DOI and published URL.
+
+## Troubleshooting
+
+If an article is not appearing in Google Scholar despite being published:
+
+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.
+2. **Wait**: Google Scholar's crawlers may take several weeks to index new content
+3. **Verify meta tags**: Check the HTML source of the article page for `citation_*` tags
+4. **Check robots.txt**: Ensure `computo-journal.org/robots.txt` does not block the article path
+5. **Verify PDF accessibility**: The PDF must be publicly accessible without authentication
+6. **Contact us**: If issues persist, reach out at
diff --git a/scripts/fix-sitemap.lua b/scripts/fix-sitemap.lua
new file mode 100644
index 0000000..89b88cc
--- /dev/null
+++ b/scripts/fix-sitemap.lua
@@ -0,0 +1,103 @@
+#!/usr/bin/env lua
+-- Post-render script to fix and enhance sitemap.xml
+-- Handles two tasks:
+-- 1. Fix Quarto's /index.html URLs to trailing-slash form
+-- 2. Add published article URLs from published.yml to sitemap
+--
+-- Quarto bug: https://github.com/quarto-dev/quarto-cli/discussions/11398
+
+local output_dir = os.getenv("QUARTO_PROJECT_OUTPUT_DIR") or "_site"
+local sitemap_path = output_dir .. "/sitemap.xml"
+local published_yml_path = "site/published.yml"
+
+-- Read file contents
+local function read_file(path)
+ local file = io.open(path, "r")
+ if not file then
+ return nil
+ end
+ local content = file:read("*a")
+ file:close()
+ return content
+end
+
+-- Write content to file
+local function write_file(path, content)
+ local file = io.open(path, "w")
+ if not file then
+ error("Cannot write to " .. path)
+ end
+ file:write(content)
+ file:close()
+end
+
+-- Extract article URLs from published.yml
+-- Uses the repo: field (e.g., published-202402-elmasri-optimal) to construct URLs
+local function extract_article_urls(yml_content)
+ local urls = {}
+ local seen = {}
+ for line in yml_content:gmatch("[^\r\n]+") do
+ local repo = line:match("^%s- repo: (published-[%w%-]+)")
+ if repo and not seen[repo] then
+ local url = "https://computo-journal.org/" .. repo .. "/"
+ table.insert(urls, url)
+ seen[repo] = true
+ end
+ end
+ return urls
+end
+
+-- Check if URL already exists in sitemap
+local function url_exists_in_sitemap(sitemap_content, url)
+ return sitemap_content:find("" .. url .. "", 1, true) ~= nil
+end
+
+-- Main logic
+local sitemap_content = read_file(sitemap_path)
+if not sitemap_content then
+ print("No sitemap.xml found, skipping")
+ os.exit(0)
+end
+
+local modified = false
+
+-- Task 1: Fix /index.html URLs to trailing-slash form
+local fixed_content = sitemap_content:gsub("/index%.html", "/")
+if fixed_content ~= sitemap_content then
+ sitemap_content = fixed_content
+ modified = true
+ print("Fixed /index.html URLs to trailing-slash form")
+end
+
+-- Task 2: Add article URLs from published.yml
+local yml_content = read_file(published_yml_path)
+if yml_content then
+ local article_urls = extract_article_urls(yml_content)
+ local lastmod = os.date("!%Y-%m-%dT%H:%M:%SZ")
+
+ for _, url in ipairs(article_urls) do
+ if not url_exists_in_sitemap(sitemap_content, url) then
+ -- Insert URL before
+ local entry = string.format(
+ ' \n %s\n %s\n \n',
+ url, lastmod
+ )
+ sitemap_content = sitemap_content:gsub("", entry .. "")
+ modified = true
+ end
+ end
+
+ if #article_urls > 0 then
+ print("Added " .. #article_urls .. " article URLs to sitemap")
+ end
+else
+ print("No published.yml found, skipping article URLs")
+end
+
+-- Write updated sitemap
+if modified then
+ write_file(sitemap_path, sitemap_content)
+ print("Updated sitemap.xml")
+else
+ print("No changes needed")
+end
diff --git a/scripts/fix-sitemap.sh b/scripts/fix-sitemap.sh
deleted file mode 100755
index 0e2fdd3..0000000
--- a/scripts/fix-sitemap.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-# Quarto emits sitemap entries ending in /index.html, while pages'
-# rel="canonical" tags point at the trailing-slash form. Google Search Console
-# then flags the sitemap URLs as duplicates with no chosen canonical.
-# Upstream bug: https://github.com/quarto-dev/quarto-cli/discussions/11398
-
-sitemap="${QUARTO_PROJECT_OUTPUT_DIR:-_site}/sitemap.xml"
-
-[ -f "$sitemap" ] || exit 0
-
-sed -i 's|/index\.html|/|g' "$sitemap"