var breeze_prefetch = {"local_url":"https://glassfullmedia.ie","ignore_remote_prefetch":"1","ignore_list":["wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
https://glassfullmedia.ie/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js
https://glassfullmedia.ie/wp-includes/js/jquery/jquery.min.js
https://glassfullmedia.ie/wp-includes/js/jquery/jquery-migrate.min.js
/* Default comment here */
(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "q66xf6sr0n");
Skip to content
SEO for Irish Businesses
Rank where your customers search.
Local SEO, content, backlinks and AI visibility, built to compound month on month. We mix our team with AI tooling so you get expert-level strategy without paying for junior hours. Connected to the Glassfull Media platform so the calls and forms SEO sends you all land in one central inbox.
Trusted by 150+ Irish businesses since 2017
SEO Done Right
Three things that actually move rankings.
Everything else is noise. Get these right, rank for the things that bring in calls, and compound forever. Get them wrong, spend on SEO for 18 months and wonder why nothing happened.
01
Local Authority
Google has to trust that you serve this area. Local SEO is about signals that prove it.
Google Business Profile fully optimised
NAP consistency across 40+ directories
Citations in Irish-specific directories
Local review generation (integrates with reputation system)
Geo-targeted landing pages by city or region
02
Relevant Content
Rank for what buyers actually type into Google. Not what an SEO tool guesses they might.
Intent-based keyword research for your market
Service pages that convert, not just rank
Location-specific landing pages
Blog content answering real customer questions
Schema markup for services, FAQs, reviews, events
03
Technical Health
A site that loads slowly or breaks on mobile will not rank no matter how good the content is.
Core Web Vitals optimised
Mobile-first audit and fixes
Internal linking and site architecture
Crawl and indexing issues resolved
HTTPS, canonicals, sitemaps, redirects all clean
What We Actually Do
Month by month, compounding.
🤖
AI Content Assist Included in every package. AI-accelerated blog posts, service pages, location pages, meta descriptions and FAQs. Human-reviewed before publish, never posted raw. 4× to 10× the content volume at the same price.
🔎
Technical audit & fixes Full crawl, speed, mobile, structured data review. We fix the technical debt first so rankings have room to move.
⚡
Implementation done for you We write it, review it, publish it. Internal linking, schema, images, meta tags and alt text all added by our team. You never log in.
🔗
Link building Irish and UK-relevant backlinks. Digital PR, business directories, industry mentions. No spammy networks.
📍
Local SEO + GBP Google Business Profile optimisation, citation clean-up, local landing pages, review generation automation. Essential for trades, clinics and hospitality.
✨
AI visibility (GEO) Rank in ChatGPT, Perplexity and Google AI Overviews. Schema, content structure and authority signals tuned for AI answers.
🔁
Automation & alerts Rank tracking, competitor monitoring, Google algorithm alerts, site health checks. Automated so nothing slips through.
📊
Reporting & strategy Monthly one-page report. Rankings, traffic, leads, phone calls from organic. Clear recommendations for the next month.
Monthly SEO Packages
Compound every month.
Every package now includes AI Content Assist as standard. More content, more pages, more rankings at the same price. Fixed monthly fee. No vague hours-based billing.
✓ Sign up for 12 months paid in advance and setup is on us.
Basic SEO
€750/ month
+ €500 audit & setup · waived when paid 12 months in advance
The essentials for a single-location Irish business. Foundation for ranking locally.
Full technical audit and fixes
Google Business Profile optimisation
On-page SEO across key pages
Citation clean-up (top 20 directories)
4 AI-assisted content pieces / month
Human review before every publish
Automated rank tracking & alerts
Monthly ranking and traffic report
Start Here →
Reputation Builder
€1,250/ month
+ €750 audit & setup · waived when paid 12 months in advance
For businesses serious about compounding their online presence. Content, authority and reputation, working together.
Everything in Basic SEO
8 AI-accelerated content pieces / month
Implementation done for you (publish + link + schema)
Backlink acquisition (2+/month)
Review generation automation
Competitor tracking & alerts
AI visibility (GEO) optimisation
Monthly strategy call
Scale Up →
High-Growth
Bespokescoped
Tailored to your market
For multi-location, eCommerce, or businesses in high-competition categories. Scoped and priced per engagement.
Everything in Reputation Builder
15+ AI-accelerated content pieces / month
Digital PR and press releases
Multi-location SEO support
Bespoke link-building campaigns
Dedicated content lead (human)
Weekly strategy check-ins
Scope a Project →
AI Content Assist means our team briefs, AI drafts, our editor reviews, our implementation team publishes. You get the volume of an in-house content team at the price of a single freelancer. No content writer, SEO specialist, or technical consultant to hire on top.
Answer the calls SEO sends you.
Rankings bring the phone call. The AI Receptionist answers it, qualifies the lead, and books the job. €200/month + €400 setup. No minimum contract.
See the AI →
Ready to Rank?
Book a free 20-minute call.No pitch.
We will check your current rankings, show you the gaps, and outline a 90-day SEO plan. No obligation.
var _iub = _iub || [];
_iub.csConfiguration = {"ccpaAcknowledgeOnDisplay":true,"cookiePolicyInOtherWindow":true,"countryDetection":true,"enableCcpa":true,"floatingPreferencesButtonDisplay":"bottom-right","inlineDelay":0,"invalidateConsentWithoutLog":true,"lang":"en","siteId":2429660,"whitelabel":false,"cookiePolicyId":55481570, "banner":{ "acceptButtonCaptionColor":"white","acceptButtonColor":"#54a9cb","acceptButtonDisplay":true,"backgroundColor":"#183441","closeButtonDisplay":false,"customizeButtonCaptionColor":"white","customizeButtonColor":"rgba(238.2, 238.2, 238.2, 0)","customizeButtonDisplay":true,"position":"float-bottom-center","prependOnBody":true,"rejectButtonCaptionColor":"white","rejectButtonColor":"rgba(0, 115.1, 206.17, 0)","rejectButtonDisplay":true,"slideDown":false,"textColor":"white" }};
https://glassfullmedia.ie/wp-content/themes/flatsome-child/js/custom.js
https://glassfullmedia.ie/wp-content/themes/flatsome/assets/js/extensions/flatsome-live-search.js
window.lazyLoadOptions={elements_selector:"img[data-src],.perfmatters-lazy,.perfmatters-lazy-css-bg",thresholds:"400px 0px",class_loading:"pmloading",class_loaded:"pmloaded",callback_loaded:function(element){if(element.tagName==="IFRAME"){if(element.classList.contains("pmloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}};window.addEventListener("LazyLoad::Initialized",function(e){var lazyLoadInstance=e.detail.instance;var target=document.querySelector("body");var observer=new MutationObserver(function(mutations){lazyLoadInstance.update()});var config={childList:!0,subtree:!0};observer.observe(target,config);});function perfmattersLazyLoadYouTube(e){var t=document.createElement("iframe"),r="ID?";r+=0===e.dataset.query.length?"":e.dataset.query+"&",r+="autoplay=1",t.setAttribute("src",r.replace("ID",e.dataset.src)),t.setAttribute("frameborder","0"),t.setAttribute("allowfullscreen","1"),t.setAttribute("allow","accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),e.replaceChild(t,e.firstChild)}
//# sourceURL=perfmatters-lazy-load-js-before
https://glassfullmedia.ie/wp-content/plugins/perfmatters/js/lazyload.min.js
https://glassfullmedia.ie/wp-includes/js/dist/vendor/wp-polyfill.min.js
var wpcf7_recaptcha = {
"sitekey": "6LflnTEbAAAAAKr5AiUyVARKsY-RjjUokUVWJI-0",
"actions": {
"homepage": "homepage",
"contactform": "contactform"
}
};
//# sourceURL=wpcf7-recaptcha-js-before
https://glassfullmedia.ie/wp-content/plugins/contact-form-7/modules/recaptcha/index.js
https://glassfullmedia.ie/wp-includes/js/hoverIntent.min.js
var flatsomeVars = {"theme":{"version":"3.20.6"},"ajaxurl":"https://glassfullmedia.ie/wp-admin/admin-ajax.php","rtl":"","sticky_height":"53","stickyHeaderHeight":"0","scrollPaddingTop":"0","assets_url":"https://glassfullmedia.ie/wp-content/themes/flatsome/assets/","lightbox":{"close_markup":"\u003Cbutton title=\"%title%\" type=\"button\" class=\"mfp-close\"\u003E\u003Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"\u003E\u003Cline x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\u003E\u003C/line\u003E\u003Cline x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\u003E\u003C/line\u003E\u003C/svg\u003E\u003C/button\u003E","close_btn_inside":false},"user":{"can_edit_pages":false},"i18n":{"mainMenu":"Main Menu","toggleButton":"Toggle"},"options":{"cookie_notice_version":"1","swatches_layout":false,"swatches_disable_deselect":false,"swatches_box_select_event":false,"swatches_box_behavior_selected":false,"swatches_box_update_urls":"1","swatches_box_reset":false,"swatches_box_reset_limited":false,"swatches_box_reset_extent":false,"swatches_box_reset_time":300,"search_result_latency":"0","header_nav_vertical_fly_out_frontpage":1}};
//# sourceURL=flatsome-js-js-extra
https://glassfullmedia.ie/wp-content/themes/flatsome/assets/js/flatsome.js
(function(){window.pmDC=1;window.pmDT=15;if(window.pmDT){var e=setTimeout(d,window.pmDT*1e3)}const t=["keydown","mousedown","mousemove","wheel","touchmove","touchstart","touchend"];const n={normal:[],defer:[],async:[]};const o=[];const i=[];var r=false;var a="";window.pmIsClickPending=false;t.forEach(function(e){window.addEventListener(e,d,{passive:true})});if(window.pmDC){window.addEventListener("touchstart",b,{passive:true});window.addEventListener("mousedown",b)}function d(){if(typeof e!=="undefined"){clearTimeout(e)}t.forEach(function(e){window.removeEventListener(e,d,{passive:true})});if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",s)}else{s()}}async function s(){c();u();f();m();await w(n.normal);await w(n.defer);await w(n.async);await p();document.querySelectorAll("link[data-pmdelayedstyle]").forEach(function(e){e.setAttribute("href",e.getAttribute("data-pmdelayedstyle"))});window.dispatchEvent(new Event("perfmatters-allScriptsLoaded")),E().then(()=>{h()})}function c(){let o={};function e(t,e){function n(e){return o[t].delayedEvents.indexOf(e)>=0?"perfmatters-"+e:e}if(!o[t]){o[t]={originalFunctions:{add:t.addEventListener,remove:t.removeEventListener},delayedEvents:[]};t.addEventListener=function(){arguments[0]=n(arguments[0]);o[t].originalFunctions.add.apply(t,arguments)};t.removeEventListener=function(){arguments[0]=n(arguments[0]);o[t].originalFunctions.remove.apply(t,arguments)}}o[t].delayedEvents.push(e)}function t(t,n){const e=t[n];Object.defineProperty(t,n,{get:!e?function(){}:e,set:function(e){t["perfmatters"+n]=e}})}e(document,"DOMContentLoaded");e(window,"DOMContentLoaded");e(window,"load");e(document,"readystatechange");t(document,"onreadystatechange");t(window,"onload")}function u(){let n=window.jQuery;Object.defineProperty(window,"jQuery",{get(){return n},set(t){if(t&&t.fn&&!o.includes(t)){t.fn.ready=t.fn.init.prototype.ready=function(e){if(r){e.bind(document)(t)}else{document.addEventListener("perfmatters-DOMContentLoaded",function(){e.bind(document)(t)})}};const e=t.fn.on;t.fn.on=t.fn.init.prototype.on=function(){if(this[0]===window){function t(e){e=e.split(" ");e=e.map(function(e){if(e==="load"||e.indexOf("load.")===0){return"perfmatters-jquery-load"}else{return e}});e=e.join(" ");return e}if(typeof arguments[0]=="string"||arguments[0]instanceof String){arguments[0]=t(arguments[0])}else if(typeof arguments[0]=="object"){Object.keys(arguments[0]).forEach(function(e){delete Object.assign(arguments[0],{[t(e)]:arguments[0][e]})[e]})}}return e.apply(this,arguments),this};o.push(t)}n=t}})}function f(){document.querySelectorAll("script[type=pmdelayedscript]").forEach(function(e){if(e.hasAttribute("src")){if(e.hasAttribute("defer")&&e.defer!==false){n.defer.push(e)}else if(e.hasAttribute("async")&&e.async!==false){n.async.push(e)}else{n.normal.push(e)}}else{n.normal.push(e)}})}function m(){var o=document.createDocumentFragment();[...n.normal,...n.defer,...n.async].forEach(function(e){var t=e.getAttribute("src");if(t){var n=document.createElement("link");n.href=t;if(e.getAttribute("data-perfmatters-type")=="module"){n.rel="modulepreload"}else{n.rel="preload";n.as="script"}o.appendChild(n)}});document.head.appendChild(o)}async function w(e){var t=e.shift();if(t){await l(t);return w(e)}return Promise.resolve()}async function l(t){await v();return new Promise(function(e){const n=document.createElement("script");[...t.attributes].forEach(function(e){let t=e.nodeName;if(t!=="type"){if(t==="data-perfmatters-type"){t="type"}n.setAttribute(t,e.nodeValue)}});if(t.hasAttribute("src")){n.addEventListener("load",e);n.addEventListener("error",e)}else{n.text=t.text;e()}t.parentNode.replaceChild(n,t)})}async function p(){r=true;await v();document.dispatchEvent(new Event("perfmatters-DOMContentLoaded"));await v();window.dispatchEvent(new Event("perfmatters-DOMContentLoaded"));await v();document.dispatchEvent(new Event("perfmatters-readystatechange"));await v();if(document.perfmattersonreadystatechange){document.perfmattersonreadystatechange()}await v();window.dispatchEvent(new Event("perfmatters-load"));await v();if(window.perfmattersonload){window.perfmattersonload()}await v();o.forEach(function(e){e(window).trigger("perfmatters-jquery-load")})}async function v(){return new Promise(function(e){requestAnimationFrame(e)})}function h(){window.removeEventListener("touchstart",b,{passive:true});window.removeEventListener("mousedown",b);i.forEach(e=>{if(e.target.outerHTML===a){e.target.dispatchEvent(new MouseEvent("click",{view:e.view,bubbles:true,cancelable:true}))}})}function E(){return new Promise(e=>{window.pmIsClickPending?g=e:e()})}function y(){window.pmIsClickPending=true}function g(){window.pmIsClickPending=false}function L(e){e.target.removeEventListener("click",L);C(e.target,"pm-onclick","onclick");i.push(e),e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();g()}function b(e){if(e.target.tagName!=="HTML"){if(!a){a=e.target.outerHTML}window.addEventListener("touchend",A);window.addEventListener("mouseup",A);window.addEventListener("touchmove",k,{passive:true});window.addEventListener("mousemove",k);e.target.addEventListener("click",L);C(e.target,"onclick","pm-onclick");y()}}function k(e){window.removeEventListener("touchend",A);window.removeEventListener("mouseup",A);window.removeEventListener("touchmove",k,{passive:true});window.removeEventListener("mousemove",k);e.target.removeEventListener("click",L);C(e.target,"pm-onclick","onclick");g()}function A(e){window.removeEventListener("touchend",A);window.removeEventListener("mouseup",A);window.removeEventListener("touchmove",k,{passive:true});window.removeEventListener("mousemove",k)}function C(e,t,n){if(e.hasAttribute&&e.hasAttribute(t)){event.target.setAttribute(n,event.target.getAttribute(t));event.target.removeAttribute(t)}}})();