Every page on your site should have an answer to one question: what do you want the visitor to do next? Call you, request a quote, subscribe, download the brochure, book a table. The block that carries that answer — a short line of copy and a button — is the call to action, and on most Joomla sites it is either missing entirely or buried in a footer where nobody scrolls.
The pleasant surprise is that Joomla needs no special extension for this. A Custom HTML module, a module class suffix for styling, and a sensible position get you a reusable CTA block you can publish anywhere — including inside article text. We have built these on dozens of client sites, and the pattern below has survived template changes, Joomla upgrades and several redesigns.
This guide covers the build, the placement options, the copywriting, and the two things almost everyone skips: testing variants and tracking clicks.
Build the CTA as a Custom HTML module
The workhorse here is Joomla's Custom module type (called Custom HTML in Joomla 3). It renders whatever HTML you put in it, which makes it perfect for a self-contained CTA block. The full mechanics — including how to stop the WYSIWYG editor from mangling pasted markup — are in our step-by-step guide on how to create a Custom HTML module in Joomla, so here is the short version:
- Go to Content, Site Modules, click New, and choose Custom (Custom HTML).
- Title it something you will recognise later, like "CTA — free quote". You can hide the title from visitors with the Show Title toggle.
- Enter the CTA markup — a heading, one sentence, one button link.
- Pick a position and set Menu Assignment.
- Publish.
A clean starting structure looks like this:
<div class="cta-box">
<h3>Need help with your Joomla site?</h3>
<p>Tell us what is broken and we will send a fixed-price quote within one working day.</p>
<a class="cta-button" href="/contact/">Get your free quote</a>
</div> Keep the markup boring on purpose. One container, one heading, one paragraph, one link. Every extra element you add now is something you will have to restyle after the next template change.
Style it with a module class suffix
You could style the CTA with inline attributes, but the maintainable route is Joomla's module class suffix. On the module's Advanced tab there is a Module Class field (Module Class Suffix in Joomla 3). Whatever you type there is appended to the module's wrapper class in the rendered HTML, giving you a CSS hook that targets this module — or this family of modules — without touching anything else.
Two long-standing gotchas:
- The leading space. Entering cta-highlight produces a combined class like modulecta-highlight, which no stylesheet matches. Entering cta-highlight — with a space in front — produces a separate class. Joomla 4 and 5 handle this more gracefully, but the space habit still saves debugging time on older sites.
- Suffix vs chrome. The suffix only works if your template's module chrome actually outputs the class. Almost all do, but if your suffix seems to do nothing, inspect the rendered HTML and check whether the class arrived.
Then, in your template's custom CSS file, style the suffix class:
.cta-highlight {
background: #0b3d66;
color: #fff;
padding: 24px;
border-radius: 8px;
}
.cta-highlight .cta-button {
display: inline-block;
background: #ff9f1c;
color: #111;
padding: 12px 28px;
font-weight: 700;
} The payoff comes later: create five CTA modules for five different offers, give them all the same suffix, and they all inherit one consistent style. Rebrand the site and you edit one CSS block, not five modules.
Placement: module positions vs loadposition
Where the CTA appears matters as much as what it says. Joomla gives you two mechanisms, and mature sites use both.
Template module positions
Assign the module to one of your template's positions — below the header, above the footer, in the sidebar — and control which pages it shows on through Menu Assignment. This is ideal for site-wide or section-wide CTAs. If you do not know what positions your template offers, our tutorial on finding template module positions shows how to preview them all in two minutes; and if none of them sit where you want the CTA, you can add a new module position to the template yourself.
loadposition and loadmodule inside articles
For CTAs that belong in the middle of content — after the third paragraph of a long guide, say — Joomla's Content plugin lets you embed modules directly in article text. Make sure the "Content - Load Modules" plugin is enabled, then either:
- Assign your CTA module to a made-up position name like cta-inline (type it into the position field and press enter — positions do not have to exist in the template), then write loadposition cta-inline inside curly braces in the article where you want it; or
- Use loadmodule with the module type and title, in the same curly-brace syntax, to embed one specific module.
The loadposition route is usually better: you can later swap which module renders at that spot without editing any articles. One warning — if you ever paste the tag into an article and see the literal text instead of the module, the Load Modules plugin is disabled or the tag got mangled by the editor.
Where CTAs actually work
Three placements do most of the work on content sites: one visible without scrolling on landing pages, one mid-article on long posts (via loadposition), and one at the natural end of the content, where a reader who finished the piece is warmest. Sidebar CTAs underperform on mobile because the sidebar drops below the content — often below the footer CTA it duplicates.
Write copy that asks for one thing
Design gets the attention, but copy does the converting. The rules that keep proving themselves:
- One action per block. A CTA offering "Call us, email us, or follow us on social" converts worse than any of those alone. Pick the action this page is for.
- Verb first. "Get your free quote", "Download the checklist", "Book a call". The button label should complete the sentence "I want to…".
- Say what happens next. "We reply within one working day" beats a paragraph of adjectives. Specific promises lower the fear of clicking.
- Match the visitor's temperature. Cold traffic on a blog post gets a low-commitment ask (download, subscribe); a pricing page can ask for the sale.
- Cut to roughly 25 words. Heading, one sentence, button. If the block needs more explanation, the page around it is not doing its job.
Simple A/B habits without fancy tooling
You do not need a testing platform to stop guessing. Joomla's module system supports a poor man's A/B workflow that is honest enough for most sites:
- Duplicate the CTA module and change exactly one thing — the button label, the headline, or the offer. One variable, or you learn nothing.
- Give each version a distinct link parameter (see tracking below) so clicks are attributable.
- Run version A for a fixed period, then version B for the same period. Sequential testing is cruder than a real split test — seasonality can muddy it — but with small-site traffic a true split would take months to reach significance anyway.
- Compare clicks per thousand page views, not raw clicks, so traffic swings do not fool you.
- Keep the winner, archive the loser, write down the result somewhere you will find it.
The discipline matters more than the method: one change at a time, equal exposure, decided in advance how you will judge it.
Track the clicks or you are flying blind
A CTA without click tracking is decoration. The lightest-weight approach is URL parameters plus your analytics package:
| Method | Setup effort | What you learn | Best when |
|---|---|---|---|
| URL parameters on the button link | Minutes | Which CTA and placement drove the visit | CTA links to your own pages |
| Analytics click events | Small snippet or built-in toggle | Every click, even to tel: and mailto: links | Phone and email CTAs |
| Destination-page goals | Configure once in analytics | Completions, not just clicks | Form and thank-you page flows |
For internal links, appending something like ?src=cta-footer to the href and filtering for it in analytics costs nothing and immediately shows which placement earns its keep. For phone-number CTAs, a click event on the tel: link is the only way to count taps. And wherever a form is the destination, measure the thank-you page, not the button — a CTA that gets clicks but no submissions is pointing at a broken or bloated form, which is a different problem worth knowing about.
Common mistakes we keep cleaning up
- CTA blindness by repetition: the same banner on every page in every position trains visitors to ignore it. Vary the offer by section.
- Ten CTAs, no priority: newsletter popup, chat bubble, share bar and three banners all shouting at once. Decide the page's primary action and demote the rest — the same discipline we preach in our floating social bar article.
- Buttons that do not look clickable: flat text links styled like body copy. A CTA button should look like a button: contrast, padding, whitespace around it.
- The editor ate my markup: saving the module through a WYSIWYG editor strips or rewrites the HTML. Switch your editor to None or CodeMirror before editing CTA modules.
- Unpublished by accident: module publishing has date fields; a "Finish Publishing" date set during a promotion quietly kills the CTA later. If a CTA vanishes, check dates and menu assignment first.
FAQ
Do I need a special extension to create CTAs in Joomla?
No. The core Custom HTML module, a module class suffix and a few lines of CSS cover the vast majority of CTA needs, and the Content - Load Modules plugin (also core) handles in-article placement. Page-builder extensions add drag-and-drop convenience and built-in styling, at the cost of markup lock-in: if you ever remove the builder, its content usually needs rebuilding. For a block as simple as a CTA, core tools age better.
How many CTAs should one page have?
One primary action, possibly repeated. A long article can show the same CTA mid-content and again at the end — repetition of one message is fine. What hurts is competing messages: subscribe here, call us there, download this, follow that. Visitors faced with several equal asks reliably choose none of them.
Why is my module class suffix not doing anything?
Three usual suspects. First, the missing leading space on older Joomla versions, which glues your suffix onto the existing class name. Second, the module chrome: the suffix only appears if the template's module wrapper outputs it, so inspect the page source and see whether your class exists in the HTML. Third, CSS specificity — your rule may be there but outgunned by the template's own styles; make the selector more specific rather than reaching for important flags.
Can I put a CTA inside a Joomla article without a module?
You can paste the HTML straight into the article, and for a one-off it works. But the module-plus-loadposition route wins for anything reused: edit the module once and every article updates, versus hunting through fifty articles to change a phone number. Direct pasting also has to survive the article editor's filtering every time anyone edits that article, which is a recurring risk rather than a one-time one.
The bottom line
A good Joomla CTA is unglamorous machinery: a Custom HTML module with clean markup, styled through a class suffix, published where the visitor's attention actually is, asking for exactly one verb-first action, with clicks counted. Build one this afternoon for your highest-traffic page, give it a tracking parameter, and check the numbers in a month. Then change one word and see if you can beat it. That loop — build, measure, tweak — is the whole game. For more hands-on guides, visit our Joomla hub.