<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Grav - Tag - arleo.eu</title><link>https://www.arleo.eu/en/tags/grav/</link><description>Grav - Tag - arleo.eu</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 09 May 2026 22:33:22 +0200</lastBuildDate><atom:link href="https://www.arleo.eu/en/tags/grav/" rel="self" type="application/rss+xml"/><item><title>Grav → Hugo migration: 2 years of blog flipped in one day</title><link>https://www.arleo.eu/en/posts/migration-grav-hugo/</link><pubDate>Sat, 09 May 2026 22:33:22 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/migration-grav-hugo/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/migration-grav-hugo-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="tldr">TL;DR</h2>
<p>On May 9, 2026, I switched <code>arleo.eu</code> from <strong>Grav</strong> (PHP CMS) to <strong>Hugo</strong> (Go static site generator) in a single session. <strong>Atomic flip</strong> (≈ 0 second downtime), 22 legacy articles migrated under <code>/posts/</code> with <strong>SEO aliases</strong> to preserve Google-indexed URLs, BetterStack <code>/ping</code> monitoring intact throughout the operation.</p>
<p>The code and migration script are open source: <a href="https://github.com/jmrGrav/grav-to-hugo-migration" target="_blank" rel="noopener noreffer ">github.com/jmrGrav/grav-to-hugo-migration</a>.</p>]]></description></item><item><title>Migrating Grav → Hugo: 32 files, 0 regression</title><link>https://www.arleo.eu/en/posts/migration-grav-vers-hugo/</link><pubDate>Sat, 09 May 2026 13:01:28 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/migration-grav-vers-hugo/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/migration-grav-vers-hugo-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="tldr">TL;DR</h2>
<p>arleo.eu had been running on <strong>Grav CMS</strong> for ~3 years: flat-file, PHP-FPM, ModSecurity, Cloudflare. Everything worked. But operational debt was piling up: PHP upgrades, Grav plugins to patch, TTFB creeping past 800ms on some pages.</p>
<p>I migrated to <strong>Hugo</strong> (Go-based static site generator) in two weeks, keeping the same URLs, the same content, and both languages FR/EN. <strong>Zero regression</strong> on SEO, Cloudflare indexing, or internal links. Here&rsquo;s how.</p>
<h2 id="why-hugo">Why Hugo</h2>
<p>I had 3 criteria:</p>
<ol>
<li><strong>Performance</strong> — Pure static. No PHP, no DB. nginx serves pre-generated <code>.html</code> directly.</li>
<li><strong>Security</strong> — Attack surface divided by 10. No more PHP-FPM, no server-side execution on public pages.</li>
<li><strong>Clean multilingual</strong> — Hugo natively supports i18n via the <code>index.{lang}.md</code> convention (page bundles).</li>
</ol>
<p>Hugo checks all the boxes. Alternatives evaluated: <strong>Eleventy</strong> (JS, but less mature i18n), <strong>Zola</strong> (Rust, awesome, but fewer themes), <strong>Gatsby</strong> (too heavy for a homelab).</p>]]></description></item><item><title>Grav MCP Server: connect Claude.ai to your website in 30 minutes</title><link>https://www.arleo.eu/en/posts/grav-mcp-server/</link><pubDate>Fri, 17 Apr 2026 16:00:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/grav-mcp-server/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/grav-mcp-server-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>Connect Claude.ai to your Grav website in 30 minutes: a PHP plugin exposes 9 tools (read, create, update, delete pages, manage plugins) via JSON-RPC 2.0, a FastAPI proxy handles OAuth 2.1 authentication, and nginx bridges the internet to your server. Result: Claude can read and modify your site content directly from a conversation.</p>
<p>Code available on GitHub:</p>
<ul>
<li>🔌 Grav plugin: <a href="https://github.com/jmrGrav/grav-plugin-mcp-server" target="_blank" rel="noopener noreffer ">jmrGrav/grav-plugin-mcp-server</a></li>
<li>🔐 OAuth proxy: <a href="https://github.com/jmrGrav/mcp-oauth-proxy" target="_blank" rel="noopener noreffer ">jmrGrav/mcp-oauth-proxy</a></li>
</ul>
<h2 id="-why">🧠 Why</h2>
<p>Anthropic&rsquo;s <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener noreffer ">MCP (Model Context Protocol)</a> allows Claude.ai to connect to external data sources via standardized tools. Until now, no MCP plugin existed for Grav CMS.</p>]]></description></item><item><title>Grav Google Indexing Plugin: automatically submit pages to Google</title><link>https://www.arleo.eu/en/posts/grav-plugin-google-indexing/</link><pubDate>Fri, 17 Apr 2026 14:00:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/grav-plugin-google-indexing/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/grav-plugin-google-indexing-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>Following the IndexNow plugin (Bing/Yandex), this second plugin completes the SEO pipeline by submitting modified pages directly to the <strong>Google Indexing API</strong> — with no Composer dependency, using a RS256 JWT signed in pure PHP from a Google Cloud service account.</p>
<p>Source code available on GitHub:</p>
<ul>
<li>🔌 Plugin: <a href="https://github.com/jmrGrav/grav-plugin-google-indexing" target="_blank" rel="noopener noreffer ">jmrGrav/grav-plugin-google-indexing</a></li>
</ul>
<h2 id="-why">🧠 Why</h2>
<p>IndexNow covers Bing and Yandex, but <strong>Google does not support IndexNow</strong>. To notify Google instantly, you need to use its dedicated API: <a href="https://developers.google.com/search/apis/indexing-api/v3/prereqs" target="_blank" rel="noopener noreffer ">Google Indexing API v3</a>.</p>]]></description></item><item><title>Grav IndexNow Plugin: automatically submit pages to search engines</title><link>https://www.arleo.eu/en/posts/grav-plugin-indexnow/</link><pubDate>Fri, 17 Apr 2026 12:00:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/grav-plugin-indexnow/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/grav-plugin-indexnow-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>Grav has no IndexNow plugin in its official catalog. This homemade plugin fills the gap by automatically submitting modified URLs to <code>api.indexnow.org</code> on every page save — whether through the Grav admin or the MCP plugin — no manual intervention, no cron job, no external dependency.</p>
<p>Source code available on GitHub:</p>
<ul>
<li>🔌 Plugin: <a href="https://github.com/jmrGrav/grav-plugin-indexnow" target="_blank" rel="noopener noreffer ">jmrGrav/grav-plugin-indexnow</a></li>
</ul>
<h2 id="-why">🧠 Why</h2>
<p><a href="https://www.indexnow.org/" target="_blank" rel="noopener noreffer ">IndexNow</a> is an open protocol that instantly notifies compatible search engines (Bing, Yandex) when a page is created or modified. Without it, search engines wait for their next crawler pass — which can take hours or days.</p>]]></description></item></channel></rss>