Hide draft articles from the front page and mark drafts when viewed directly

Add an Article::published() scope and use it on the front page (which
previously showed drafts), the /blog listing and the feeds. Draft
articles are still reachable at their URL, but now show a draft notice,
a "[Draft]" title prefix and a noindex robots meta tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jonny Barnes 2026-09-26 16:20:50 +01:00
commit a31c218784
Signed by: jonny
SSH key fingerprint: SHA256:CTuSlns5U7qlD9jqHvtnVmfYV3Zwl2Z7WnJ4/dqOaL8

View file

@ -1,7 +1,18 @@
@extends('master')
@section('title'){{ strip_tags($article->title) }} « @stop
@section('title'){{ $article->published ? '' : '[Draft] ' }}{{ strip_tags($article->title) }} « @stop
@if (! $article->published)
@push('head')
<meta name="robots" content="noindex, nofollow">
@endpush
@endif
@section('content')
@unless ($article->published)
<aside class="draft-notice" role="note">
<strong>Draft</strong> — this post hasn’t been published yet. It isn’t listed on the site or in feeds, so only people with this link can see it.
</aside>
@endunless
@include('templates.article', ['article' => $article])
@stop