How To Add a Blogroll in WordPress (No Plugin)

⏲️ Estimated reading time: 7 min

Learn what a blogroll is, why it still matters for UX and SEO, and how to add one to WordPress without plugins. Use a custom menu, enable the legacy Links Manager, or roll your own shortcode clean, fast, and fully controllable.


How to Add a Blogroll in Your WordPress Site (Without a Plugin)

A classic of early blogging, the blogroll is simply a curated list of links to blogs or resources you recommend. Although it fell out of fashion for a few years, it’s making a comeback thanks to the indie‑web, newsletters, and creators who want to share the love and send readers to trusted sources. The good news: you don’t need a plugin to add one. Below you’ll learn exactly what a blogroll is, why it helps, and several plug‑in‑free ways to implement it ranging from zero‑code to lightweight theme snippets.


What Is a Blogroll?

A blogroll is a public list of outbound links usually other blogs, creators, or tools curated by you. It often appears in a sidebar, footer, or on a dedicated page. At minimum it includes the site name and URL; more polished versions add a short description, favicon, or category.

Typical placements:

  • Sidebar widget on posts
  • Footer column site‑wide
  • A standalone “Friends / Resources” page
How To Add a Blogroll in WordPress (No Plugin)

Why Add a Blogroll in WordPress?

1) Reader Value & Community
A blogroll signals your niche and introduces readers to related voices. It builds goodwill and can start mutually beneficial relationships.

2) UX & Discovery
It’s a human‑curated discovery surface. Readers get a vetted path to “what to read next,” which boosts time on site and return visits.

3) Light SEO Benefits (Used Carefully)
Outbound links to authoritative, relevant sites help search engines understand your content’s neighborhood. Keep it relevant, non‑spammy, and avoid massive link dumps. Quality > quantity.

4) Zero‑Maintenance Option
If you implement it with menus or a shortcode, you can update links without touching templates again.


Approaches (No Plugin Required)

  1. Use a Custom Menu as a Blogroll (fastest, theme‑agnostic)
  2. Re‑enable the legacy Links Manager (native, simple lists)
  3. Create a tiny shortcode in functions.php (ultimate control, still simple)

You can use any single method or mix them for example, use a menu for your sidebar and a shortcode for a dedicated page.


Method 1: Use a Custom Menu as Your Blogroll (Recommended)

This method uses WordPress’ built‑in Menus plus a small shortcode so you can drop the blogroll anywhere (page, post, widget, or template).

Step A – Create the Menu

  1. Go to Appearance → Menus (or Appearance → Editor → Navigation in block themes).
  2. Create a new menu named Blogroll.
  3. Add Custom Links for each site (URL + Link Text). Save.

Step B – Add the Shortcode to functions.php

Place this code in your child theme’s functions.php or a site‑specific snippet (no plugin builder needed if you’re comfy editing the theme):

// Shortcode: [blogroll menu="Blogroll"]
function hz_blogroll_menu_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'menu'   => 'Blogroll', // menu name or ID
        'class'  => 'hz-blogroll',
        'depth'  => 1,
    ), $atts, 'blogroll' );

    $menu = wp_get_nav_menu_object( $atts['menu'] );
    if ( ! $menu ) return '';

    $items = wp_get_nav_menu_items( $menu->term_id );
    if ( ! $items ) return '';

    $output  = '<ul class="'. esc_attr( $atts['class'] ) .'">';
    foreach ( $items as $item ) {
        $title = esc_html( $item->title );
        $url   = esc_url( $item->url );
        $desc  = isset( $item->description ) ? trim( $item->description ) : '';
        $output .= '<li><a href="'. $url .'" rel="nofollow noopener" target="_blank">'. $title .'</a>';
        if ( $desc !== '' ) {
            $output .= '<small class="hz-desc"> - '. esc_html( $desc ) .'</small>';
        }
        $output .= '</li>';
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode( 'blogroll', 'hz_blogroll_menu_shortcode' );

Step C – Display It Anywhere

  • In a page or post: add a Shortcode block and paste [blogroll].
  • In a template (PHP): echo do_shortcode('[blogroll]');
  • In a widget area: use a Shortcode or Custom HTML block.

Optional CSS (drop into Appearance → Customize → Additional CSS)

.hz-blogroll { list-style: none; margin: 0; padding: 0; }
.hz-blogroll li { margin: 0 0 .5rem; }
.hz-blogroll a { text-decoration: none; }
.hz-blogroll a:hover { text-decoration: underline; }
.hz-blogroll .hz-desc { color: #666; margin-left: .25rem; }

Pros: dead simple edits via Menus, no database changes, works with any theme.
Cons: per‑link descriptions rely on menu item “Description” (sometimes hidden in Screen Options / Advanced for classic WP).


Method 2: Use WordPress’ Legacy Links Manager (Still Built‑In)

WordPress still ships the Links Manager code just disabled by default. You can re‑enable it with one line and then manage links at Links → Add New.

Enable Links Manager

Add this to functions.php:

// Turn on the classic Links Manager (for wp_list_bookmarks).
add_filter( 'pre_option_link_manager_enabled', '__return_true' );

Add Links

  • Go to Links → Add New, fill Name, Web Address, and Description.
  • Organize links with Link Categories.

Display the Blogroll

Use this template tag where you want the list:

// In a PHP template
wp_list_bookmarks( array(
    'title_before' => '<h2>',
    'title_after'  => '</h2>',
    'category'     => '',          // or a category ID/name
    'categorize'   => false,       // set true to group by category
    'show_description' => true,
    'orderby'      => 'name',
    'order'        => 'ASC',
) );

Or use the Links widget (classic themes) / block (if available).

Pros: native UI for descriptions, categories, XFN.
Cons: older UI, not block‑first; some themes hide links widgets by default.


Method 3: A Lightweight Custom Shortcode (Array‑Driven)

Prefer a hard‑coded, super‑light approach (no menus, no legacy manager)? Define your links in code and render a list via shortcode.

// Shortcode: [blogroll_simple]
function hz_blogroll_simple_shortcode() {
    $links = array(
        array( 'name' => 'HelpZone Blog', 'url' => 'https://helpzone.blog', 'desc' => 'WordPress tips & tutorials' ),
        array( 'name' => 'Make WordPress', 'url' => 'https://make.wordpress.org', 'desc' => 'Core and community' ),
        array( 'name' => 'WordPress.org', 'url' => 'https://wordpress.org', 'desc' => 'Plugins, themes, docs' ),
    );

    $out = '<ul class="hz-blogroll">';
    foreach ( $links as $l ) {
        $out .= '<li><a href="'. esc_url( $l['url'] ) .'" target="_blank" rel="nofollow noopener">'
              . esc_html( $l['name'] ) . '</a>';
        if ( ! empty( $l['desc'] ) ) {
            $out .= '<small class="hz-desc">- '. esc_html( $l['desc'] ) .'</small>';
        }
        $out .= '</li>';
    }
    $out .= '</ul>';
    return $out;
}
add_shortcode( 'blogroll_simple', 'hz_blogroll_simple_shortcode' );

Use [blogroll_simple] anywhere.
Pros: zero UI overhead, fastest render.
Cons: editing requires changing code.


Bonus: Register a Sidebar Widget Area for the Blogroll

If your theme doesn’t have a convenient spot, register one:

function hz_register_blogroll_sidebar() {
    register_sidebar( array(
        'name'          => 'Blogroll Sidebar',
        'id'            => 'hz-blogroll-sidebar',
        'before_widget' => '<section class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
}
add_action( 'widgets_init', 'hz_register_blogroll_sidebar' );

Then add a Shortcode block with [blogroll] or [blogroll_simple] to that widget area.


Best Practices (SEO, UX, and Maintenance)

  • Keep it focused: 8–20 links is a sweet spot. Too many looks spammy.
  • Use descriptions: 6–12 words clarifying why a link matters.
  • Open in new tab + rel attributes: target="_blank" with rel="noopener nofollow" is standard for external links.
  • Check for rot: audit quarterly; remove dead sites.
  • Order matters: alphabetically or by relevance; avoid random ordering.
  • Design lightly: small text, compact spacing; don’t overshadow your main CTAs.
  • Measure clicks: if you must, wrap with an internal redirect (e.g., /go/…) or track with analytics do it sparingly.

Conclusion

A blogroll is a small feature with big community impact. Whether you pick a Menu‑based approach for convenience, Links Manager for a classic workflow, or a code‑first shortcode for total control, you can add a clean, fast, plugin‑free blogroll in minutes and update it in seconds. Start with the menu method, ship it in your sidebar or footer, and iterate later with descriptions, categories, and a dedicated “Friends” page.


🔔 For more tutorials like this, consider subscribing to our blog.
📩 Do you have questions or suggestions? Leave a comment or contact us!

🏷️ Tags: WordPress, Blogroll, Links Manager, functions.php, Shortcode, WordPress Menus, Theme Development, SEO, UX, Tutorials

📢 Hashtags: #WordPress, #Blogroll, #NoPlugin, #Shortcode, #ThemeDev, #WPMenus, #SEOTips, #UXDesign, #WebDev, #Tutorials

Report an issue (max 5 words):

Only logged-in users can submit reports.


Discover more from HelpZone

Subscribe to get the latest posts sent to your email.

Want to support us? Let friends in on the secret and share your favorite post!

Photo of author

Flo

How To Add a Blogroll in WordPress (No Plugin)

Published

Welcome to HelpZone.blog, your go-to hub for expert insights, practical tips, and in-depth guides across technology, lifestyle, business, entertainment, and more! Our team of passionate writers and industry experts is dedicated to bringing you the latest trends, how-to tutorials, and valuable advice to enhance your daily life. Whether you're exploring WordPress tricks, gaming insights, travel hacks, or investment strategies, HelpZone is here to empower you with knowledge. Stay informed, stay inspired because learning never stops! 🚀

👍 Like us on Facebook!

Closing in 10 seconds

Leave a Reply