Title
The #[Title] attribute sets the page title for full-page Livewire components.
Basic usage
Apply the #[Title] attribute to a full-page component to set its title:
<?php // resources/views/pages/posts/⚡create.blade.php use Livewire\Attributes\Title;use Livewire\Component; new #[Title('Create Post')] class extends Component { public $title = ''; public $content = ''; public function save() { // Save post... }};?> <div> <h1>Create a New Post</h1> <input type="text" wire:model="title" placeholder="Post title"> <textarea wire:model="content" placeholder="Post content"></textarea> <button wire:click="save">Save Post</button></div>
The browser tab will display "Create Post" as the page title.
Layout configuration
For the #[Title] attribute to work, your layout file must include a $title variable:
<!-- resources/views/components/layouts/app.blade.php --> <!DOCTYPE html><html><head> <title>{{ $title ?? 'My App' }}</title> </head><body> {{ $slot }}</body></html>
The ?? 'My App' provides a fallback title if none is specified.
Dynamic titles
For dynamic titles using component properties, use the title() method in the render() method:
<?php // resources/views/pages/posts/⚡edit.blade.php use Livewire\Component;use App\Models\Post; new class extends Component { public Post $post; public function mount($id) { $this->post = Post::findOrFail($id); } public function render() { return $this->view() ->title("Edit: {$this->post->title}"); }};?> <div> <h1>Edit Post</h1> <!-- ... --></div>
The title will dynamically include the post's title.
Combining with layouts
You can use both #[Title] and #[Layout] together:
<?php // resources/views/pages/posts/⚡create.blade.php use Livewire\Attributes\Layout;use Livewire\Attributes\Title;use Livewire\Component; new#[Layout('layouts.admin')]#[Title('Create Post')]class extends Component { // ...};
This component will use the admin layout with "Create Post" as the title.
When to use
Use #[Title] when:
- Building full-page components
- You want clean, declarative title definitions
- The title is static or rarely changes
- You're following SEO best practices
Use title() method when:
- The title depends on component properties
- You need to compute the title dynamically
- The title changes based on component state
Example: CRUD pages
Here's a complete example showing titles across CRUD operations:
<?php // resources/views/pages/posts/⚡index.blade.php use Livewire\Attributes\Title;use Livewire\Component; new #[Title('All Posts')] class extends Component { };
<?php // resources/views/pages/posts/⚡create.blade.php use Livewire\Attributes\Title;use Livewire\Component; new #[Title('Create Post')] class extends Component { };
<?php // resources/views/pages/posts/⚡edit.blade.php use Livewire\Component;use App\Models\Post; new class extends Component { public Post $post; public function render() { return $this->view()->title("Edit: {$this->post->title}"); }};
<?php // resources/views/pages/posts/⚡show.blade.php use Livewire\Component;use App\Models\Post; new class extends Component { public Post $post; public function render() { return $this->view()->title($this->post->title); }};
Each page has a contextually appropriate title that improves user experience and SEO.
SEO considerations
Good page titles are crucial for SEO:
- Be descriptive - "Edit Post: Getting Started with Laravel" is better than "Edit"
- Keep it concise - Aim for 50-60 characters to avoid truncation in search results
- Include keywords - Help search engines understand your page content
- Be unique - Each page should have a distinct title
Only for full-page components
The #[Title] attribute only works for full-page components accessed via routes. Regular components rendered within other views don't use titles—they inherit the parent page's title.
Learn more
For more information about full-page components, layouts, and routing, see the Pages documentation.
Reference
#[Title( string $content,)]
| Parameter | Type | Default | Description |
|---|---|---|---|
$content |
string |
required | The text to display in the browser's title bar |