Bài viết này mình chia sẻ đến bạn cách tạo trang 404 tuỳ chỉnh theme GeneratePress với cấu trúc tối ưu cho SEO. Để làm được cái này thì cũng có nhiều plugin hỗ trợ. Tuy nhiên, mình không muốn cài thêm plugin và cũng không có nhu cầu tuỳ chỉnh cầu kỳ nên không cần thiết.

Phương án ưu tiên của mình ở đây là sửa trực tiếp trên file 404.php của child theme. Hoặc nếu bạn muốn sửa trực tiếp lên file 404 gốc của theme GeneratePress cũng được. Nhưng khi theme này cập nhật lên bản mới thì nội dung chỉnh sửa sẽ bị mất, bạn nhớ lưu lại bài viết này + nội dung đã chỉnh sửa, để sau khi cập nhật thì copy dán vào. Dưới đây là đoạn code tuỳ chỉnh của mình.
<?php
declare(strict_types=1);
defined('ABSPATH') || exit;
status_header(404);
nocache_headers();
add_action('wp_head', function() {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
echo '<meta name="googlebot" content="noindex" />' . "\n";
$schema = [
'@context' => 'https://schema.org',
'@type' => 'WebPage',
'name' => '404 - Trang không tồn tại',
'description' => 'Trang bạn đang tìm kiếm không tồn tại hoặc đã bị xóa.',
'url' => esc_url(home_url($_SERVER['REQUEST_URI'])),
'isPartOf' => [
'@type' => 'WebSite',
'name' => get_bloginfo('name'),
'url' => esc_url(home_url('/'))
],
'breadcrumb' => [
'@type' => 'BreadcrumbList',
'itemListElement' => [
[
'@type' => 'ListItem',
'position' => 1,
'name' => 'Trang chủ',
'item' => esc_url(home_url('/'))
],
[
'@type' => 'ListItem',
'position' => 2,
'name' => '404 - Không tìm thấy trang'
]
]
],
'mainEntity' => [
'@type' => 'WebPageElement',
'name' => 'Thông báo lỗi 404',
'text' => 'Trang không tồn tại'
]
];
echo '<script type="application/ld+json">' . wp_json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</script>' . "\n";
}, 1);
remove_action('wp_head', 'rel_canonical');
get_header();
?>
<div <?php generate_do_attr('content'); ?>>
<main <?php generate_do_attr('main'); ?> role="main">
<?php do_action('generate_before_main_content'); ?>
<div class="inside-article">
<article class="post no-results not-found">
<header class="entry-header">
<h1 class="entry-title">404 - Trang không tồn tại</h1>
</header>
<div class="entry-content">
<p>Chào bạn, nếu bạn nhìn thấy thông báo này thì có thể trang mà bạn vừa truy cập không còn tồn tại, mình rất tiếc vì điều đó, nhưng mình cũng không còn cách nào tốt hơn. Bạn có thể tham khảo qua lý do bên dưới:</p>
<p>Mình đã làm lại blog <a href="<?php echo esc_url(home_url('/')); ?>" rel="home" title="Về trang chủ Hocban.vn"><strong>Hocban.vn</strong></a> từ tháng 11/2025 và đã bỏ đi khoảng 90% các bài viết cũ để tinh gọn lại nội dung, chuyên chủ đề hơn thay vì quá nhiều nội dung ngoài lề như trước đó.</p>
<p>Ngoài ra, còn một trường hợp nữa là: bạn truy cập cũng có thể đã đổi URL sang một URL mới. Nếu đó là nội dung bạn quan tâm thì có thể gõ một cụm từ khoá ngắn trên thanh tìm kiếm xem sao: Ví dụ: tắt thumbnail, tối ưu tốc độ, .....</p>
</div>
</article>
</div>
<?php do_action('generate_after_main_content'); ?>
</main>
</div>
<?php
do_action('generate_after_primary_content_area');
generate_construct_sidebars();
get_footer();
Sau khi copy dán xong thì bạn truy cập theo đường dẫn tương tự: domain.com/404 để kiểm tra là đã thành công chưa. Nếu đã oke rồi thì bạn tiến hành chỉnh sửa nội dung văn bản theo ý nữa là được. Thủ thuật này như vậy thôi, nếu có gì thắc mắc hoặc đóng góp ý kiến thì bạn để lại bình luận bên dưới nhé !