<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>The Pagehaus blog</title>
  <subtitle>News and guides from Pagehaus, plain HTML hosting.</subtitle>
  <link rel="self" href="https://blog.pagehaus.app/posts/feed.xml" />
  <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/" />
  <id>tag:pagehaus-blog.pagehaus.site,2026:blog</id>
  <updated>2026-11-02T14:55:00Z</updated>
  <author>
    <name>Ademar Gonzalez</name>
  </author>
  <entry>
    <title>Renamed a page? Old links can now find the new one</title>
    <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/redirects/" />
    <id>tag:pagehaus-blog.pagehaus.site,2026:blog/redirects</id>
    <published>2026-11-02T14:55:00Z</published>
    <updated>2026-11-02T14:55:00Z</updated>
    <category term="news" />
    <category term="seo" />
    <summary>Redirects on Pagehaus: a _redirects file, or one click from your list of broken links.</summary>
    <content type="html" xml:base="https://blog.pagehaus.app/posts/redirects/">&lt;p&gt;Rename &lt;code&gt;about-us.html&lt;/code&gt; to &lt;code&gt;about.html&lt;/code&gt; and every link to the old address breaks: the ones in Google, in old social
posts, on other people's websites. Visitors land on &amp;quot;not found&amp;quot;, and the search ranking the old page earned goes
nowhere.&lt;/p&gt;
&lt;p&gt;Now you can send them on. Pagehaus sites can have redirects, on every plan.&lt;/p&gt;
&lt;h2 id="one-click-from-your-broken-links"&gt;One click from your broken links&lt;/h2&gt;
&lt;p&gt;Your site's &lt;strong&gt;Analytics&lt;/strong&gt; tab lists addresses visitors followed a link to but that don't exist. Next to each one there's
now &lt;strong&gt;Redirect this address…&lt;/strong&gt;. Pick the page that replaced it, and that's it: the next visitor following the old link
lands on the new page.&lt;/p&gt;
&lt;h2 id="or-write-them-yourself"&gt;Or write them yourself&lt;/h2&gt;
&lt;p&gt;Behind that button is a plain text file named &lt;code&gt;_redirects&lt;/code&gt; at the top of your site, one rule per line: the old address,
then the new one.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/about-us        /about.html
/blog/*          /posts/:splat
/news/:year/:slug  /posts/:year-:slug.html
/old-pricing     /pricing.html     302
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;A rule is a &lt;strong&gt;301&lt;/strong&gt; (moved for good) unless it says &lt;strong&gt;302&lt;/strong&gt; (moved for now). A 301 tells search engines the page
moved, so its ranking moves with it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt; matches the rest of an address, and &lt;code&gt;:splat&lt;/code&gt; puts it in the new one, so one line can move a whole section.&lt;/li&gt;
&lt;li&gt;Matching ignores capital letters and a slash at the end, because old links come spelled every way.&lt;/li&gt;
&lt;li&gt;It's the same format Netlify and Cloudflare Pages use, so a &lt;code&gt;_redirects&lt;/code&gt; file you already have works here too.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="it-cant-break-a-working-page"&gt;It can't break a working page&lt;/h2&gt;
&lt;p&gt;A rule only applies where there's nothing else: no file at that address. If the page is still there, visitors see the
page. A typo in your rules can't take a working page offline, and to redirect an address you remove what's there.&lt;/p&gt;
&lt;p&gt;Lines that can't be read are skipped, and your site's Files tab tells you which and why. If you work on your own
computer, &lt;code&gt;pagehaus serve&lt;/code&gt; follows your rules as Pagehaus does, and &lt;code&gt;pagehaus check&lt;/code&gt; points out mistakes and rules that
go round in a circle.&lt;/p&gt;
&lt;h2 id="moving-a-site-to-pagehaus"&gt;Moving a site to Pagehaus&lt;/h2&gt;
&lt;p&gt;This is what redirects are really for. Moving from WordPress, Wix or another host usually changes your addresses, and
redirects keep the old ones working. We're writing a full guide to moving a site without losing your search rankings;
until then, &lt;a href="https://pagehaus.app/help/redirects"&gt;the help page&lt;/a&gt; has the steps.&lt;/p&gt;
&lt;p&gt;Redirects to other websites (sending &lt;code&gt;/shop&lt;/code&gt; to your shop, say) are on the Personal and Pro plans.&lt;/p&gt;
&lt;p&gt;— Ademar&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Edit your site like a document, with CraftPages</title>
    <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/craftpages/" />
    <id>tag:pagehaus-blog.pagehaus.site,2026:blog/craftpages</id>
    <published>2026-11-02T14:54:00Z</published>
    <updated>2026-11-02T14:54:00Z</updated>
    <category term="guides" />
    <summary>CraftPages is a free desktop editor for plain HTML sites. It publishes to Pagehaus over SFTP, and it's great for handing a site to a client.</summary>
    <content type="html" xml:base="https://blog.pagehaus.app/posts/craftpages/">&lt;p&gt;One question we hear a lot: &amp;quot;I built my client a site in plain HTML. How do they change the opening hours without
calling me?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://craftpages.app/"&gt;CraftPages&lt;/a&gt; is a good answer. It's a free, open-source desktop app for Mac, Windows and Linux,
made by Vitalii Kiiko at MooMoo Web Studio. It opens a plain HTML site from a folder and lets you edit it like a
document: click a heading and type. The layout and the code stay exactly as you wrote them.&lt;/p&gt;
&lt;p&gt;We tried it from start to finish with a Pagehaus site, and it works as it is.&lt;/p&gt;
&lt;h2 id="publishing-to-pagehaus"&gt;Publishing to Pagehaus&lt;/h2&gt;
&lt;p&gt;CraftPages publishes over SFTP, which every Pagehaus site has. In &lt;strong&gt;App settings&lt;/strong&gt;, add a server connection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server:&lt;/strong&gt; sftp.pagehaus.app&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port:&lt;/strong&gt; 2022 (not the 22 it suggests)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User name:&lt;/strong&gt; your site's name&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password:&lt;/strong&gt; your Pagehaus password&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, in &lt;strong&gt;Project settings → Deploy&lt;/strong&gt;, choose that connection and leave &lt;strong&gt;Folder on the server&lt;/strong&gt; empty. Press
&lt;strong&gt;Publish site&lt;/strong&gt; and your pages go up. After that, each publish uploads only the files that changed.&lt;/p&gt;
&lt;p&gt;Our &lt;a href="https://pagehaus.app/guides/publish-from-craftpages"&gt;step-by-step guide&lt;/a&gt; has screenshots of each screen.&lt;/p&gt;
&lt;h2 id="handing-a-site-to-a-client"&gt;Handing a site to a client&lt;/h2&gt;
&lt;p&gt;This is what CraftPages is made for. Build the site your way, then install CraftPages on your client's computer with
the same folder. They can change text, images and blog posts, and the code editor stays hidden unless you turn it on.&lt;/p&gt;
&lt;p&gt;On a Personal or Pro plan, give them an SFTP login of their own, which can be limited to one folder, so you can take it
away later without changing yours.&lt;/p&gt;
&lt;h2 id="two-safety-nets"&gt;Two safety nets&lt;/h2&gt;
&lt;p&gt;CraftPages keeps a history of every publish, and Pagehaus keeps its own version history of your files. A mistake can
be undone from either side.&lt;/p&gt;
&lt;p&gt;If you change the address of a blog post in CraftPages, it writes the move to a &lt;code&gt;_redirects&lt;/code&gt; file, which Pagehaus
follows, so old links to the post keep working.&lt;/p&gt;
&lt;p&gt;Thanks to Vitalii for making it, and for making it free.&lt;/p&gt;
&lt;p&gt;— Ademar&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A blog on your plain HTML site, without WordPress</title>
    <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/a-blog-without-wordpress/" />
    <id>tag:pagehaus-blog.pagehaus.site,2026:blog/a-blog-without-wordpress</id>
    <published>2026-11-02T14:53:00Z</published>
    <updated>2026-11-02T14:53:00Z</updated>
    <category term="news" />
    <summary>Write posts in Markdown, press Publish, and get plain HTML pages, a list of posts, tags and an RSS feed.</summary>
    <content type="html" xml:base="https://blog.pagehaus.app/posts/a-blog-without-wordpress/">&lt;p&gt;The page you're reading is plain HTML. It was written in Markdown in the Pagehaus dashboard, and pressing &lt;strong&gt;Publish&lt;/strong&gt;
turned it into a page, added it to the list of posts, and updated the RSS feed. There's no WordPress behind it, no
database and no plugins.&lt;/p&gt;
&lt;p&gt;Every Pagehaus site can have a blog like this one, on every plan.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;Open your site's &lt;strong&gt;Blog&lt;/strong&gt; tab, write a post and press &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Write in Markdown,&lt;/strong&gt; with a live preview in your site's own design. Paste or drag images straight into the text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publishing makes plain HTML pages:&lt;/strong&gt; the post, a list of posts, a page for each tag, an RSS feed and a sitemap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drafts stay private&lt;/strong&gt; until you publish them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Every publish saves a version first,&lt;/strong&gt; so you can undo it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show your latest posts on your home page&lt;/strong&gt; with one line.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your site has a shared header and footer, the blog's pages use them, with your stylesheet, so the blog fits in
with the pages you already have.&lt;/p&gt;
&lt;h2 id="your-posts-are-files"&gt;Your posts are files&lt;/h2&gt;
&lt;p&gt;Each post is a Markdown file in your site, and each published page is an HTML file next to your others. You can
download them, edit them anywhere, keep them in Git, or take them to another host. Nothing is locked in a database.&lt;/p&gt;
&lt;h2 id="writing-with-an-assistant"&gt;Writing with an assistant&lt;/h2&gt;
&lt;p&gt;If you've connected Pagehaus to Claude or ChatGPT, you can ask it to write a post, edit one, or publish your drafts.
It uses the same Blog tab you do, so what it writes shows up there for you to check.&lt;/p&gt;
&lt;h2 id="starting-fresh"&gt;Starting fresh&lt;/h2&gt;
&lt;p&gt;Making a new site? The &lt;a href="https://template-blog.pagehaus.site"&gt;Blog template&lt;/a&gt; comes with a blog and three sample posts,
so you can see how it fits together before you write your own.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pagehaus.app/help/blog"&gt;How the blog works&lt;/a&gt; · &lt;a href="https://pagehaus.app/blog-hosting"&gt;Blog hosting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;— Ademar&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Visitor counters are back</title>
    <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/visitor-counters/" />
    <id>tag:pagehaus-blog.pagehaus.site,2026:blog/visitor-counters</id>
    <published>2026-11-02T14:52:00Z</published>
    <updated>2026-11-02T14:52:00Z</updated>
    <category term="news" />
    <category term="old-web" />
    <summary>"You are visitor number 012,345": a visitor counter for your site in one line of HTML, with no script and no cookies.</summary>
    <content type="html" xml:base="https://blog.pagehaus.app/posts/visitor-counters/">&lt;p&gt;Remember the counter at the bottom of every home page in 1999? Little digits in boxes, a &amp;quot;You are visitor number&amp;quot; in
front, and the quiet thrill of watching it go up.&lt;/p&gt;
&lt;p&gt;You can put one on your Pagehaus site now, with one line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;You are visitor number &amp;lt;!--#counter --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That shows the number as plain text, in your page's own font and colours: &amp;quot;You are visitor number 12,345&amp;quot;.&lt;/p&gt;
&lt;h2 id="digits-in-boxes"&gt;Digits in boxes&lt;/h2&gt;
&lt;p&gt;For the real thing, pick a theme:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!--#counter theme=&amp;quot;odometer&amp;quot; --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;classic:&lt;/strong&gt; white digits in black boxes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;odometer:&lt;/strong&gt; digits like an old car's mileage counter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;led:&lt;/strong&gt; glowing red digits.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each takes your colours, size, font and corners: &lt;code&gt;color=&amp;quot;#f4e7c5&amp;quot; background=&amp;quot;saddlebrown&amp;quot;&lt;/code&gt;. Still have a set of 90s
counter GIFs? Put them in your site as &lt;code&gt;0.gif&lt;/code&gt; to &lt;code&gt;9.gif&lt;/code&gt; and the counter uses those instead.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://pagehaus.app/tools/visitor-counter"&gt;counter maker&lt;/a&gt; shows each look as you change it, and gives you the line
to copy.&lt;/p&gt;
&lt;h2 id="honest-numbers"&gt;Honest numbers&lt;/h2&gt;
&lt;p&gt;Old counters went up every time someone pressed reload. This one counts each visitor once a day, and robots don't count
at all, the same way your site's Analytics tab counts visitors.&lt;/p&gt;
&lt;p&gt;There's no script on your page and no cookie in your visitor's browser: the number is written into the page as it's
sent. Screen readers hear the number once, not each box.&lt;/p&gt;
&lt;h2 id="bringing-your-old-number"&gt;Bringing your old number&lt;/h2&gt;
&lt;p&gt;Moving a site that already had a counter? Start where it left off:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!--#counter start=&amp;quot;48210&amp;quot; --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Counters work on every plan, Free included. &lt;a href="https://pagehaus.app/help/visitor-counter"&gt;All the settings are here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What was on your first home page? A counter, a guestbook, an &amp;quot;under construction&amp;quot; GIF? We'd like to know.&lt;/p&gt;
&lt;p&gt;— Ademar&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Why we made Pagehaus</title>
    <link rel="alternate" type="text/html" href="https://blog.pagehaus.app/posts/why-we-made-pagehaus/" />
    <id>tag:pagehaus-blog.pagehaus.site,2026:blog/why-we-made-pagehaus</id>
    <published>2026-11-02T14:51:39Z</published>
    <updated>2026-11-02T14:51:39Z</updated>
    <category term="news" />
    <summary>Hosting for websites made of plain files: what it is, who it's for, and what we won't turn it into.</summary>
    <content type="html" xml:base="https://blog.pagehaus.app/posts/why-we-made-pagehaus/">&lt;p&gt;A website can still be a folder of files. An &lt;code&gt;index.html&lt;/code&gt;, a stylesheet, a few images. Open it in a browser and it
works. Put it on a server and it works for everyone.&lt;/p&gt;
&lt;p&gt;Somewhere along the way that stopped being the obvious choice. Hosting turned into build steps, Git repositories,
plugins to update and dashboards full of things a small site never needs. If you wrote your site by hand, had an AI
assistant make it, or kept one from 2009 that still works, the places to put it online either want you to become a
developer or want to sell you a website builder.&lt;/p&gt;
&lt;p&gt;We made Pagehaus for that folder of files.&lt;/p&gt;
&lt;h2 id="what-it-is"&gt;What it is&lt;/h2&gt;
&lt;p&gt;You upload your files and they're live at &lt;strong&gt;yourname.pagehaus.site&lt;/strong&gt;, with HTTPS. Drag them into the browser, use
FileZilla or any SFTP app, run one command, or let Claude or ChatGPT publish them for you. There's nothing to install,
build or update, and the files we serve are the ones you uploaded.&lt;/p&gt;
&lt;p&gt;Around that, the things a small site keeps needing are built in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Your own domain,&lt;/strong&gt; with HTTPS set up for you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contact forms&lt;/strong&gt; that email you, without code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A blog,&lt;/strong&gt; written in Markdown and published as plain HTML pages. This one is.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One header and footer for every page,&lt;/strong&gt; with Server Side Includes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visitor numbers without cookies,&lt;/strong&gt; so you don't need a cookie banner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version history,&lt;/strong&gt; so a mistake is never permanent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password-protected pages,&lt;/strong&gt; for client previews and drafts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One site is free, with no card. Your own domain starts at $4 a month.&lt;/p&gt;
&lt;h2 id="what-it-isnt"&gt;What it isn't&lt;/h2&gt;
&lt;p&gt;Pagehaus doesn't run server code: no PHP, no Node, no databases. That's a choice. It's what keeps a site fast, safe
and cheap to keep online for years, and it's what lets us give away a free plan.&lt;/p&gt;
&lt;p&gt;We also won't make your site depend on us. Your files are yours, in the formats everyone uses, and you can copy them
off over SFTP and take them anywhere, at any time.&lt;/p&gt;
&lt;h2 id="whats-on-this-blog"&gt;What's on this blog&lt;/h2&gt;
&lt;p&gt;New features as they arrive, guides for the things people ask us about most (moving a site without losing your search
rankings is next), and now and then a site made on Pagehaus.&lt;/p&gt;
&lt;p&gt;If you have a folder of files waiting for a home, &lt;a href="https://pagehaus.app"&gt;start here&lt;/a&gt;. And if something's missing, tell
us: support@pagehaus.app, or &lt;a href="https://www.reddit.com/r/pagehaus/"&gt;r/pagehaus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;— Ademar&lt;/p&gt;
</content>
  </entry>
</feed>
