<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">

<channel>

<title>Rosano / entries tagged &#34;self-hosting&#34;</title>



<link>https://rosano.ca/log/tag/self-hosting/</link>

<generator>Hugo</generator>

<language>en-ca</language>



<lastBuildDate>Tue, 14 Apr 2026 08:33:02 +0000</lastBuildDate>

<atom:link href="https://rosano.ca/log/tag/self-hosting/feed" rel="self" type="application/rss" /><item>
  <title>fun with redirects</title>
  <link>https://rosano.ca/blog/fun-with-redirects/</link>
  <pubDate>Mon, 18 Mar 2024 12:23:11 +0000</pubDate>
  <guid>https://rosano.ca/blog/fun-with-redirects/</guid>
  <description>Owning my URLs and avoiding link rot since 2012.</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget>Owning my URLs and avoiding link rot since 2012.</nugget><hr>
<div class="content"><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p>
<p>I'm considering even my Twitter account (<a href="https://rosano.ca/twitter">/twitter</a> in case the site goes bankrupt, and GitHub repositories (<a href="https://rosano.ca/hyperdraft-source">/hyperdraft-source</a>) or YouTube videos (<a href="https://rosano.ca/strolling-0172-video">/strolling-0172-video</a>) in case I start self-hosting; neither has happened yet, but if it occurs, I can easily update the destination once and point it somewhere else retroactively.</p>
<h1 id="self-hosting-a-link-manager">self-hosting a link manager</h1>
<figure>
	<img src="https://static.rosano.ca/home/blog/2024-03-18-fun-with-redirects/yourls.png"/>
	<figcaption>about 300 links managed with YOURLS</figcaption>
</figure>
<p>My links tend to be readable, but I like Derek Sivers' idea of making them <a href="https://sive.rs/su">short and speakable</a>. I use <a href="https://yourls.org">YOURLS</a> one-click self-hosted via <a href="https://www.cloudron.io">Cloudron</a> to manage my redirects which makes it easy to have both short and speakable if necessary; the links technically are something like <code>go.rosano.ca/whatever</code>, but because I own the data, I can make it further accessible under my root domain, as <code>rosano.ca/whatever</code> is often shortest, simplest, and most memorable. I also do the same contraction with blog permalinks so that <code>utopia.rosano.ca/interoperable-visions/</code> can be accessed at <code>rosano.ca/interoperable-visions</code>; I stick with <a href="https://ghost.org">Ghost</a>'s simple permalinks design of <code>/post-title-as-a-slug</code> and find it more readable and predictable.</p>
<h1 id="self-hosting-legacy-redirection">self-hosting legacy redirection</h1>
<p>For legacy domains and permalinks, I made a simple <a href="https://github.com/rosano/redirects/blob/master/main.js">single-file Node.js Express app</a> (<code>git push</code> self-hosted via <a href="https://caprover.com">CapRover</a>). There are about two dozen domains pointing to the same app to handle:</p>
<ol>
<li><a href="https://github.com/rosano/redirects/commit/3ed596df0fb4cebe5d32c231b4aecd44de091bbd">removing www.</a></li>
<li><a href="https://github.com/rosano/redirects/commit/52bf5d6ffe8dde9faadc0d71a524d76ec70be8ee">correcting old and mispelled domains</a></li>
<li><a href="https://github.com/rosano/redirects/commit/fbab1be533fc64ed01c0611b630eadb89c59e2a9">redirecting archived projects to a single page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/43eeee14874ded0c16be6e82fcfd786fad4caf22">masking a domain that functions as a landing page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/8a4ce8ed0c309dd4a40c57477e5df80d6fc2ba4f">redirecting PeerTube links to YouTube</a></li>
<li><a href="https://github.com/rosano/redirects/commit/41786338aee47c59e08ed6a7e03fd9a3b715c54e">redirecting gibberish slugs to friendly slugs</a></li>
<li><a href="https://github.com/rosano/redirects/commit/47a9439a5d523ea4cbbc6257e4e40e995c75dd8d">redirecting to the Wayback Machine</a> as a last resort, (but I may have done this one incorrectly, as it might cause some recursive issues).</li>
</ol>
<p>This is hopefully a graceful degradation that takes care to guide existing links somewhere useful. It also supports HTTPS so if you write <code>https://[OLD_DOMAIN]</code> it works, which is not the case when you 'forward' URLs via registrars like <a href="https://www.hover.com">Hover</a> who only support writing <code>http://[OLD_DOMAIN]</code>.</p>
<h1 id="static-versus-dynamic">static versus dynamic</h1>
<p>I love the simplicity of static sites and how they're basically free to keep alive forever, but all of my redirect pipework makes me feel forever tied to dynamic systems. It's possible to redirect via <a href="https://www.w3.org/TR/WCAG20-TECHS/H76.html">meta refresh</a> on a static page but I find it ugly to write and manage with HTML; I'm also not sure if all search engines understand them, although <a href="https://developers.google.com/search/docs/crawling-indexing/special-tags#refresh">Google claims to yet still recommends server-side redirects</a>:</p>
<blockquote>
<p>This tag, commonly called meta-refresh, sends the user to a new URL after a certain amount of time, and is sometimes used as a simple form of redirection. However, it is <a href="https://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element">not supported by all browsers and can be confusing to the user</a>. We recommend using a server-side <a href="https://developers.google.com/search/docs/crawling-indexing/301-redirects">301 redirect</a> instead.</p></blockquote>
<h1 id="conclusion">conclusion</h1>
<p>Maybe it's the librarian in me that finds it fun to have my stuff organized and moving along smoothly. I like the sense of ownership that comes with being able to direct links where I want, and the care to avoid throwing visitors into the weeds by making sure they land somewhere useful, always and forever.</p>
<hr>
	<p><small>If you want to keep reading, learn about the difference between fragile data and <a href="https://utopia.rosano.ca/durable-data/">durable data</a>, dream some <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">interoperable visions</a> with me, or marvel at how the person who wrote this needed <a href="https://utopia.rosano.ca/sixth-times-a-charm/">six tries to learn iPhone programming</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/self-hosting/">self-hosting</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 8:23 am, March 18, 2024" href="/blog/fun-with-redirects/"><time datetime="2024-03-18T08:23:11-04:00" data-pagefind-sort="date[datetime]">08h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item><item>
  <title>Monday, March 18, 2024 08h23</title>
  <link>https://rosano.ca/log/2024-03-18-fun-with-redirects/</link>
  <pubDate>Mon, 18 Mar 2024 08:23:11 -0400</pubDate>
  <guid>https://rosano.ca/log/2024-03-18-fun-with-redirects/</guid>
  <description> If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.&#xA;Redirects help links in a healthy web resolve, avoid rot, and last a long time, but they also increase agency by letting own your data (own your URLs).&#xA;own your links When I link to a platform I don&#39;t control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (/list), Mastodon instance (/mastodon), or crowdfunding platform (/fund)–I didn&#39;t have to change any links when that happened.&#xA;</description>
  <content:encoded><![CDATA[
  <div class="post">

<nugget><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p></nugget><hr>
<div class="content"><blockquote>
<p>If you have a website, what are your earliest meaningful links that still work? I have almost no broken links at least since 2012 because I usually add a redirect whenever something changes.</p></blockquote>
<p>Redirects help links in a healthy web <a href="https://www.w3.org/Provider/Style/URI">resolve</a>, avoid <a href="https://en.wikipedia.org/wiki/Link%5Frot">rot</a>, and <a href="https://worrydream.com/TheWebOfAlexandria">last a long time</a>, but they also increase agency by letting own your data (own your URLs).</p>
<h1 id="own-your-links">own your links</h1>
<p>When I link to a platform I don't control, I try to at least use a URL that I do control. I have found this useful in recent years when switching my newsletter provider (<a href="https://rosano.ca/list">/list</a>), Mastodon instance (<a href="https://rosano.ca/mastodon">/mastodon</a>), or crowdfunding platform (<a href="https://rosano.ca/fund">/fund</a>)–I didn't have to change any links when that happened.</p>
<p>I'm considering even my Twitter account (<a href="https://rosano.ca/twitter">/twitter</a> in case the site goes bankrupt, and GitHub repositories (<a href="https://rosano.ca/hyperdraft-source">/hyperdraft-source</a>) or YouTube videos (<a href="https://rosano.ca/strolling-0172-video">/strolling-0172-video</a>) in case I start self-hosting; neither has happened yet, but if it occurs, I can easily update the destination once and point it somewhere else retroactively.</p>
<h1 id="self-hosting-a-link-manager">self-hosting a link manager</h1>
<figure>
	<img src="https://static.rosano.ca/home/blog/2024-03-18-fun-with-redirects/yourls.png"/>
	<figcaption>about 300 links managed with YOURLS</figcaption>
</figure>
<p>My links tend to be readable, but I like Derek Sivers' idea of making them <a href="https://sive.rs/su">short and speakable</a>. I use <a href="https://yourls.org">YOURLS</a> one-click self-hosted via <a href="https://www.cloudron.io">Cloudron</a> to manage my redirects which makes it easy to have both short and speakable if necessary; the links technically are something like <code>go.rosano.ca/whatever</code>, but because I own the data, I can make it further accessible under my root domain, as <code>rosano.ca/whatever</code> is often shortest, simplest, and most memorable. I also do the same contraction with blog permalinks so that <code>utopia.rosano.ca/interoperable-visions/</code> can be accessed at <code>rosano.ca/interoperable-visions</code>; I stick with <a href="https://ghost.org">Ghost</a>'s simple permalinks design of <code>/post-title-as-a-slug</code> and find it more readable and predictable.</p>
<h1 id="self-hosting-legacy-redirection">self-hosting legacy redirection</h1>
<p>For legacy domains and permalinks, I made a simple <a href="https://github.com/rosano/redirects/blob/master/main.js">single-file Node.js Express app</a> (<code>git push</code> self-hosted via <a href="https://caprover.com">CapRover</a>). There are about two dozen domains pointing to the same app to handle:</p>
<ol>
<li><a href="https://github.com/rosano/redirects/commit/3ed596df0fb4cebe5d32c231b4aecd44de091bbd">removing www.</a></li>
<li><a href="https://github.com/rosano/redirects/commit/52bf5d6ffe8dde9faadc0d71a524d76ec70be8ee">correcting old and mispelled domains</a></li>
<li><a href="https://github.com/rosano/redirects/commit/fbab1be533fc64ed01c0611b630eadb89c59e2a9">redirecting archived projects to a single page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/43eeee14874ded0c16be6e82fcfd786fad4caf22">masking a domain that functions as a landing page</a></li>
<li><a href="https://github.com/rosano/redirects/commit/8a4ce8ed0c309dd4a40c57477e5df80d6fc2ba4f">redirecting PeerTube links to YouTube</a></li>
<li><a href="https://github.com/rosano/redirects/commit/41786338aee47c59e08ed6a7e03fd9a3b715c54e">redirecting gibberish slugs to friendly slugs</a></li>
<li><a href="https://github.com/rosano/redirects/commit/47a9439a5d523ea4cbbc6257e4e40e995c75dd8d">redirecting to the Wayback Machine</a> as a last resort, (but I may have done this one incorrectly, as it might cause some recursive issues).</li>
</ol>
<p>This is hopefully a graceful degradation that takes care to guide existing links somewhere useful. It also supports HTTPS so if you write <code>https://[OLD_DOMAIN]</code> it works, which is not the case when you 'forward' URLs via registrars like <a href="https://www.hover.com">Hover</a> who only support writing <code>http://[OLD_DOMAIN]</code>.</p>
<h1 id="static-versus-dynamic">static versus dynamic</h1>
<p>I love the simplicity of static sites and how they're basically free to keep alive forever, but all of my redirect pipework makes me feel forever tied to dynamic systems. It's possible to redirect via <a href="https://www.w3.org/TR/WCAG20-TECHS/H76.html">meta refresh</a> on a static page but I find it ugly to write and manage with HTML; I'm also not sure if all search engines understand them, although <a href="https://developers.google.com/search/docs/crawling-indexing/special-tags#refresh">Google claims to yet still recommends server-side redirects</a>:</p>
<blockquote>
<p>This tag, commonly called meta-refresh, sends the user to a new URL after a certain amount of time, and is sometimes used as a simple form of redirection. However, it is <a href="https://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element">not supported by all browsers and can be confusing to the user</a>. We recommend using a server-side <a href="https://developers.google.com/search/docs/crawling-indexing/301-redirects">301 redirect</a> instead.</p></blockquote>
<h1 id="conclusion">conclusion</h1>
<p>Maybe it's the librarian in me that finds it fun to have my stuff organized and moving along smoothly. I like the sense of ownership that comes with being able to direct links where I want, and the care to avoid throwing visitors into the weeds by making sure they land somewhere useful, always and forever.</p>
<hr>
	<p><small>If you want to keep reading, learn about the difference between fragile data and <a href="https://utopia.rosano.ca/durable-data/">durable data</a>, dream some <a href="https://utopia.rosano.ca/pointing-at-the-wrong-thing/">interoperable visions</a> with me, or marvel at how the person who wrote this needed <a href="https://utopia.rosano.ca/sixth-times-a-charm/">six tries to learn iPhone programming</a>.</small></p>
	<hr></div><p>
	<small>Tagged: <a href="/log/tag/technical/">technical</a>, <a href="/log/tag/zero-data/">zero data</a>, <a href="/log/tag/self-hosting/">self-hosting</a>, <a href="/log/tag/interop/">interop</a>.
	</small>
</p>

<hr>
<span class="metadata" data-pagefind-ignore>

	<small>
		<a aria-label="Permalink for 8:23 am, March 18, 2024" href="/log/2024-03-18-fun-with-redirects/"><time datetime="2024-03-18T08:23:11-04:00" data-pagefind-sort="date[datetime]">08h23</time></a>

		
		<span>from <a href="/log/place/toronto/">Toronto</a> / </span>

		<span><a href="/log/country/canada/">Canada</a></span></small>

</span>

</div>

  ]]></content:encoded>
</item>



</channel>

</rss>
