Most nonprofit annual reports are designed once, exported as a PDF, and dropped into a download link on the website. That works, but it leaves a lot on the table: a PDF is hard to read on a phone, hard for search engines to understand, and hard to measure. A dedicated annual report page on your own WordPress site fixes all three, and it doesn’t require a design agency or a separate microsite. This guide walks through what to put on the page, how to build it in WordPress, and how to keep it accessible and easy to find.
Quick Answer
Build your annual report as a normal page on your main WordPress site (for example, /annual-report/), structured in five parts: a short leadership letter, headline impact numbers, program stories, a plain-language financial summary, and a clear way to give or get involved. Offer a downloadable PDF as a companion, not a replacement. Use headings, real text, and alt text so the page works for screen readers and search engines. Publish the finished numbers only after your finance lead has confirmed them against your actual financial statements.
What Goes on the Page
1. The opening: a short letter and one headline number
- A leadership letter of roughly 200-300 words from the executive director or board chair enough to set the tone and preview the year, not a second annual report
- One headline number near the top (people served, meals delivered, funds raised toward the mission) so a visitor who leaves after ten seconds still learns something concrete
- A plain statement of the reporting period, so the page is still clear when someone finds it a year later
2. Impact in numbers
- Three to six key figures presented as large, scannable stats rather than a paragraph of totals
- Context for each number, such as a comparison with the prior year or a one-line explanation of what it means, because a bare figure is easy to skim past
- Numbers that match your other public materials inconsistencies between the annual report, your website, and grant reports are the fastest way to lose a careful donor’s trust
3. Stories and program highlights
- Two or three specific stories in place of a long list of every program, each tied to a real outcome
- Photos with descriptive alt text, or illustrations if you don’t have good photography (a well-designed report doesn’t require stock-style imagery)
- Consent for any named individual in a story or photo, which is worth confirming before publishing, not after
4. A plain-language financial summary
- A simple breakdown of where funds came from and where they went, in words and a simple chart, rather than pasted statements
- A link to your full financial statements (and, for US organizations, your Form 990 if you want to point to it) for readers who want detail. The annual report is a donor-facing summary and is a different document from your tax filing
- A note on who reviewed the figures the finance lead should sign off on every number before it goes live
5. Thanks and a next step
- A thank-you to donors, volunteers, and partners, with permission before naming individuals or organizations
- One clear call to action, such as a donate button, a volunteer sign-up, or a newsletter link, placed at the end where a reader who has just finished the report is most engaged
- A link or button for the PDF version for people who want to save or print it
Step-by-Step: Building It in WordPress
- Decide the format. A page on your main site is the simplest option and keeps the report’s search visibility tied to your existing domain. A separate microsite gives more design freedom but splits your traffic and adds maintenance. Most small and mid-sized nonprofits are better served by a single page plus a PDF.
- Set the URL for the long term. Use a stable address like
/annual-report/for the current year and move older editions to year-specific pages such as/annual-report/2025/. That way the main URL keeps building search authority instead of changing every year. - Draft the content first, in a document. Get the letter, numbers, stories, and financial summary approved before touching WordPress. It is far easier to edit text in a shared document than inside a page builder.
- Build the page with sections, not one long block. Use the block editor or your page builder to create separate sections for each of the five parts above, with one H1 for the page title and H2 headings for each section, so the outline is clear to readers, screen readers, and search engines.
- Show statistics as real text. Use a counter or large-number element for headline figures instead of putting numbers inside an image. Text is readable by assistive technology and can be indexed; a number baked into a graphic is invisible to both.
- Handle charts carefully. If you use a chart image, add alt text that states the finding (for example, “Program services made up most of total spending”) and include the underlying numbers as text nearby.
- Add the PDF as a companion. Export a tagged PDF and link it from the page. An untagged PDF exported from a design tool is often hard for screen readers to navigate, so it is worth checking before you publish.
- Write the title and meta description. Put the organization name and “annual report” in the page title, and write a meta description that states the year and one headline result.
- Optimize images for speed. Compress photos, size them for the layout, and lazy-load images below the fold; report pages tend to be image-heavy and slow pages lose visitors quickly.
- Run an accessibility check before launch. Test keyboard navigation, color contrast on your stat blocks, and alt text on every image. Our WCAG accessibility guide covers the checks in detail.
- Link to it from the places people already visit. Add it to your footer or About section, your donation page, and your email signature for the reporting season.
After You Publish: Measure and Refresh
- Track what the page actually does, not just how many people visit it. Set up an event for donate-button clicks and PDF downloads from the report, as described in our guide to nonprofit website analytics KPIs.
- Check where visitors come from and where they go next. If many arrive from email but few click the donate button, the call to action is the problem, not the traffic.
- Update the page during the year if you can. Adding a short mid-year update keeps the page fresh and gives you a reason to email supporters again.
- Keep old editions online. Archived reports show consistency over time, which is useful for donors and grant reviewers doing due diligence.
Common Mistakes to Avoid
- Publishing only a PDF. It is the easiest option and the hardest to read on a phone, to share, and to measure
- Putting key numbers inside images. Screen readers and search engines can’t read them, and they don’t resize cleanly on small screens
- Changing the URL every year. A fresh address each year throws away the search history the previous page built
- Overloading the page. Fifteen programs and thirty statistics read as noise; a few well-chosen stories and figures are more persuasive
- Skipping finance review of the final page. Numbers copied into a layout can be mistyped or rounded differently from the source; a final check against the statements is quick and prevents a public correction later
- Publishing AI-drafted narrative without a person reading it. Drafting help is fine, but someone who knows the programs should review the text before it goes public, a point we cover in our piece on AI for nonprofit financial reporting
Where Your Theme Helps (and Where It Doesn’t)
An annual report page is built from ordinary building blocks: sections, headings, large numbers, images, and a button. Any well-built WordPress theme can do it, so the theme matters less than the structure and content above. What a theme can do is remove friction. Alone is built with Elementor, comes with 40+ prebuilt pages you can import and edit, is described as WCAG-ready with an included accessibility widget, and integrates with GiveWP for the donation button at the end of the report. Alone does not list a dedicated annual-report template, so you would assemble the page yourself from its sections and widgets. That is a normal build, not a special feature, and the accessibility groundwork helps you avoid rebuilding basic structure from scratch.
Frequently Asked Questions
Do nonprofits have to publish an annual report?
Not as a general rule. An annual report is a donor-facing summary, not a tax filing, and is separate from documents like the US Form 990. Many organizations still publish one because it builds trust with donors and supports grant applications, and even a short two-page version is better than none.
Should we publish a PDF, a web page, or both?
Both is usually best. The web page is easier to read on phones, easier for search engines to understand, and easier to measure. The PDF serves people who want to save, print, or forward the report. Treat the web page as the main version.
How long should a nonprofit annual report page be?
Long enough to cover the five parts above, and no longer. A scannable page with a short letter, a handful of key numbers, two or three stories, and a plain financial summary is usually more effective than an exhaustive one.
Can we build this without a developer?
Yes. With a page builder such as Elementor or the WordPress block editor, most small nonprofits can assemble the page themselves. A developer helps mainly with custom data visualizations or a design that goes beyond standard sections.
How do we make the report accessible?
Use real headings, real text for numbers, descriptive alt text for images, sufficient color contrast, and a tagged PDF. Then test with keyboard navigation and at least one screen reader before launch.
When should we publish it?
Most organizations publish a few months after fiscal year-end, once finance has closed the books and the figures are confirmed. Accuracy matters more than speed, so wait for confirmed numbers rather than publishing early and correcting later.
Skip the styling work
Alone ships with GiveWP donation templates already styled to match the theme, plus 40+ nonprofit demo layouts. $69 for the first year, 12 months of priority support, and Elementor Pro activated by our team.



