Many bloggers also do client work, freelance projects, or sell creative services on the side. A portfolio section on your blog showcases that work directly and converts casual readers into paying clients. WordPress handles this well in several different ways. This post is the practical guide to setting one up properly.

A portfolio page showing grid of project cards with category filters and project descriptions

Portfolios vs blog posts

A portfolio is structured fundamentally differently from a blog:

  • Blog posts are chronological, text-heavy, and added on a regular schedule.
  • Portfolio projects are showcase pieces, image-heavy, added infrequently, and organized by category rather than by date.

Mixing the two into the same content type confuses both your readers and your SEO. Keep them separate from the start.

Custom post types

The cleanest way to add a portfolio is through a custom post type called “Projects” or “Portfolio,” kept distinct from your regular Posts.

The benefits of doing it this way:

  • Fully separate from blog posts in the admin dashboard.
  • Its own taxonomy, like Project Categories and Project Tags.
  • Its own dedicated template for the portfolio archive page.
  • Its own URL structure, like yourdomain.com/portfolio/project-slug.

Options for adding the post type

Theme built-in support

Many themes include portfolio support natively. Aurora supports portfolios out of the box, alongside other portfolio-friendly themes like Astra Pro, Kadence, Divi, and Avada.

Check your theme’s documentation first. If it’s built in already, use that instead of adding a plugin on top, since it saves you one more thing to maintain and update.

Portfolio plugins

If your theme doesn’t include portfolio support natively, consider:

  • Portfolio Post Type: simple, lightweight, and free. It adds the post type and not much else, which is exactly the point.
  • Visual Portfolio: free with a paid Pro tier. Adds both the post type and dedicated display blocks.
  • Essential Grid: a paid plugin with genuinely powerful grid display options.
  • WP Portfolio: a dedicated portfolio plugin from Elegant Themes.

Custom code

For developers, registering a custom post type is roughly 15 lines of PHP. Most bloggers are better served going with a plugin or a theme feature instead, unless you already have code you’ll be maintaining anyway.

Designing project pages

Each individual project page should include:

  • A hero image or video representing the project.
  • The project title.
  • The client’s name and a link to their site, when appropriate to share.
  • The project type or category.
  • The date it was completed.
  • The story: the brief you were given, and the approach you took to solve it.
  • The work itself: a gallery of images, screenshots, or video.
  • Outcomes: real results, metrics, or a client testimonial.
  • The tools you used to complete it.
  • A clear call to action, like “Hire me for similar work.”

Don’t just dump a pile of images and call it done. The story and the outcome are what turn a portfolio piece into an actual sales tool, rather than just a gallery.

Portfolio archive: the main grid

Your main portfolio page shows every project in a grid layout. A few things worth deciding upfront:

  • Projects per row: somewhere between 2 and 4, depending on how dense you want the layout to feel.
  • Hover effects: revealing the project title and a brief description on hover works well for desktop visitors.
  • Filters: by category, like web design, branding, or photography.
  • Ordering: by date, by featured status, or by manual arrangement you control directly.

Filtering options

Filtering by category is consistently the most-requested portfolio feature from visitors. Common implementations:

  • Isotope or MixItUp: JavaScript-based filtering with smooth animation between states.
  • Page reload filtering: simpler to build, though slightly less polished to use.
  • Search: a search-as-you-type option, worth adding once you have many portfolio items to sort through.

Most portfolio plugins include filtering by default. Visual Portfolio and Essential Grid both handle this particularly well.

Portfolio grid with category filter buttons at top: All, Web, Branding, Photography

Image optimization for portfolios

Portfolios are inherently image-heavy, and the same rules apply here that apply to any image-heavy site:

  • Resize before uploading, ideally to a maximum of 2000 to 2400px wide.
  • Use the WebP format wherever possible.
  • Run images through a compression plugin before they go live.
  • Enable lazy loading for anything below the fold.
  • Serve everything through a CDN.

A portfolio page with 30 unoptimized images will genuinely take 10 or more seconds to load. Visitors simply won’t wait that long, no matter how good the work is once it finally appears. Our full Core Web Vitals troubleshooting guide covers the specifics if your portfolio page is loading slowly.

Categories for portfolios

Project categories should match how potential clients actually search for you, not how you privately think about your own work:

  • By service: web design, branding, illustration, photography.
  • By industry: tech, food, fashion, healthcare.
  • By project type: logo, website, app, print.

Aim for somewhere between 5 and 10 categories. Too many fragments the portfolio into pieces too small to feel substantial on their own. Our guide to planning a blog category structure covers the same tradeoffs, since the logic carries over directly from blog categories to portfolio ones.

Case studies

For your highest-stakes work, meaning paid client projects worth showcasing in depth, consider going beyond a simple portfolio entry to a full case study instead:

  • Long-form, typically 1,000 to 3,000 words.
  • The problem the client actually faced.
  • Your specific approach to solving it.
  • The decisions you made and the tradeoffs involved.
  • Outcomes, backed by real numbers wherever you can share them.
  • A client testimonial to close it out.

Case studies consistently convert better than image-only portfolio entries, because they demonstrate your actual thinking process, not just the finished output.

Testimonials

Whether attached per project or aggregated across the whole portfolio, testimonials work best when they include:

  • Real names, not initials or “a happy client.”
  • Real photos, when you can get them.
  • A real company, role, and link back to their site.
  • Specific praise, rather than a generic “great to work with.”

Plugins like Strong Testimonials or Easy Testimonials handle the display side, or you can simply hand-code them yourself. Testimonials genuinely don’t need a plugin to work well.

Contact CTAs

The entire point of a portfolio is getting hired. Make contact genuinely easy at every step:

  • A contact button visible on every single project page.
  • An “Available for [X] projects starting [date]” status indicator, if your schedule allows for it.
  • Pricing information, if you want to pre-filter the inquiries you receive.
  • Direct calendar booking, like an embedded Calendly link, for visitors who are already serious.

Portfolio and blog navigation

How your portfolio fits into overall site navigation matters more than it might seem:

  • A top-level menu item: “Portfolio” or “Work” in your main navigation menu.
  • Linked from your About page: visitors learn who you are first, then see what you’ve actually done.
  • Linked from relevant blog posts: if you write about a topic you also do client work in, link directly to a matching portfolio piece.

SEO for portfolios

Portfolio pages can genuinely rank for service-related searches, including:

  • “[Your service] portfolio.”
  • “[Industry] [your service].”
  • “[Location] [your service].”

Write real, substantial text on your portfolio pages, not just image galleries with a title. Google needs actual text to understand what the page is about and rank it accordingly.

Schema for creative work

CreativeWork schema is the appropriate structured data type for portfolio entries. Most SEO plugins don’t add this automatically, so it’s worth checking whether your theme handles it for you.

Relevant schema fields include:

  • Name.
  • Image.
  • Author or creator.
  • Date created.
  • Description.

This isn’t strictly required for ranking, but it can help with rich snippets in search results.

Quick tip: if your theme generates schema automatically, check it with Google’s Rich Results Test after publishing your first project. Fixing a schema mismatch on one page is much faster than discovering it across twenty later.

Photography portfolios specifically

For photographers, the portfolio often is the blog, effectively. Worth considering:

  • Image quality matters even more here than it does for other kinds of portfolios.
  • The watermarking debate is worth thinking through for your own situation.
  • Lightbox and gallery functionality genuinely matters for how the work is experienced.
  • Print-sale integration, if you sell prints directly from your site.

Writer portfolios specifically

Writers don’t have “images” of their work in the same sense; they have published articles instead.

  • Embed PDFs or screenshots of published pieces where you can.
  • List each one with title, publication, date, and a link.
  • Highlight real metrics: word count, audience reach, or any awards.
  • Organizing by topic tends to work better than organizing by publication.

Developer portfolios specifically

For developers, code samples and live links matter more than polished visuals:

  • Embed GitHub repos directly.
  • Show live URLs to deployed projects wherever possible.
  • Include a tech stack list for each project.
  • A brief technical description of what you actually built.

Updating frequency

Portfolios don’t need weekly updates the way a blog does. A common, sustainable cadence:

  • Add a new project once it’s finished and approved by the client.
  • Refresh the portfolio once or twice a year, removing older or weaker pieces.
  • Update the featured order based on the direction you actually want new work to come from.

Building a portfolio worth clicking through

A portfolio adds real professional credibility to a blog and converts readers into paying clients. Use a custom post type, either through native theme support or a dedicated plugin like Portfolio Post Type or Visual Portfolio. Each project page should tell a genuine story, not just display a stack of images. Include filters, real testimonials, and clear contact calls to action throughout. Aim for 8 to 20 genuinely strong pieces rather than 50 mediocre ones padding out the count. The portfolio’s entire job is winning the next inquiry, so design every part of it with that goal in mind.