 #  I Built a Joomla Plugin for a Google Preferred Sources 

 

  ![I Built a Joomla Plugin for a Google Preferred Sources](https://cdn.richeyweb.com/images/articles/plg_system_googlepreferred/system-google-preferred.webp)    Google has been quietly handing publishers something they haven't had in years: a lever they can actually pull. So I built a [Joomla plugin](/blog/development/canonical-http-headers-for-rss-feeds "Canonical HTTP Headers for RSS Feeds") that pulls the Google Preferred Sources lever: System - Google Preferred

The feature is called Preferred Sources. It lets users mark websites they trust, and Google responds by prioritizing that content in their Top Stories feed and — as of May 27, 2026 — inside [AI Overviews](/blog/hosting/search-engine-optimization-insights-from-google-on-ai-and-seo-experts "Search Engine Optimization: Google on AI and SEO Experts") and AI Mode as well. [Google's own data](https://blog.google/products-and-platforms/products/search/original-high-quality-content-search/ "New ways to find your favorite sources and original content in AI Search") says users who mark a site as a preferred source are twice as likely to click through to it. Over 345,000 unique sites have already been selected by users worldwide.

For publishers navigating a sustained period of traffic pressure driven by AI Overviews and algorithmic volatility, that's not a minor footnote. [Search Engine Journal called it](https://www.searchenginejournal.com/google-rolls-out-preferred-sources-for-top-stories-in-search/553529/ "Google Rolls Out ‘Preferred Sources’ For Top Stories In Search") "a direct way to encourage loyal readers to see more of your coverage in Search." [PPC Land noted](https://ppc.land/google-updates-preferred-sources-guide-doubling-publisher-click-through-rates/ "Google updates preferred sources guide, doubling publisher click-through rates") that it "represents one of the few official levers Google has made available that puts audience development partially back in the hands of editorial teams rather than ranking systems."

The feature is live. It works. And Google even [publishes resources for publishers](https://search.google.com/search-console/about) that want to promote it to their audience.

The only missing piece for Joomla sites was a way to surface the call-to-action without dropping a custom HTML module on every page and hand-coding the link. That's the gap I built for.

## What the Plugin Actually Does

System - Google Preferred is a Joomla 5 [system plugin](/blog/development/my-software-powers-joomlas-volunteer-portal "My Software Powers Joomla’s Volunteer Portal") that adds a Bootstrap toast notification to your site's front end. The toast appears after a configurable delay, tells the visitor they can add your site as a Google Preferred Source, and links them directly to the right Google preferences page for your domain.

That's it. No accounts, no server-side storage, no external dependencies. The visitor either clicks it or closes it. If they close it, a cookie remembers that for however many days you configure — 30 by default — so it doesn't pester people.

## A Few Things Worth Noting About the Build

The architecture follows Joomla's recommended patterns for system plugins: `SubscriberInterface`, `onBeforeCompileHead`, `<a aria-label="Add Custom Scripts or Stylesheets to a Joomla Article" class="plg_content_interlinked text-success text-decoration-underline hasTooltip" data-asset-name="Content - InterLinked" href="/joomla-techniques/how-to-add-custom-scripts-or-stylesheets-to-a-single-joomla-article-without-losing-your-mind" title="Add Custom Scripts or Stylesheets to a Joomla Article">WebAssetManager</a>` for the JavaScript, `addScriptOptions` to pass PHP configuration values to the frontend. Nothing unusual there.

The more interesting decision was how to inject the toast HTML. Rather than building the DOM in JavaScript, the plugin renders the toast as a `<template>` element server-side. The JavaScript clones it at runtime when Bootstrap is confirmed available. This keeps the markup clean and searchable, avoids the flash of injected content, and means the toast respects whatever server-side language handling Joomla is doing at render time — including the translated strings.

The Bootstrap availability check uses a `MutationObserver` fallback. Joomla loads Bootstrap asynchronously in some configurations, so checking `typeof bootstrap !== 'undefined'` on `DOMContentLoaded` isn't always reliable. The observer watches for Bootstrap to appear and fires the toast initialization when it does. Simple enough, but it matters for sites with deferred scripts.

The admin panel includes a live style preview — a rendered toast that updates in real time as you change the background class, button class, favicon, and width settings. This was more work than the plugin itself, honestly. Joomla's radio button groups for custom field types don't fire standard `change` events reliably in all browsers, so the admin script listens for `input`, `change`, *and* a custom `update` event to cover the cases where Joomla's form machinery fires something non-standard. Not elegant, but it works.

One thing I deliberately left out: a domain auto-detection feature. It would be technically straightforward to read the current site URL and pre-populate the domain field. The problem is that Google doesn't always recognize the domain you'd expect — it might prefer `example.com` over `www.example.com`, or the other way around, depending on how your site is indexed. Getting that wrong means visitors who click through see nothing, which is worse than a blank field. Instead, the plugin includes a test link in the admin panel: enter your domain, click the link, confirm Google shows your site before you go live. One extra step, but it's the right one.

## The Timing

The feature completed its global rollout on April 30, 2026. The expansion into AI Overviews and AI Mode [was announced May 27](https://ppc.land/google-brings-preferred-sources-into-ai-overviews-and-ai-mode-today/ "Google brings Preferred Sources into AI Overviews and AI Mode today"). I'm publishing this two days after that announcement, which means the window where this is genuinely new information for most Joomla site owners is still open.

Whether it stays open is anyone's guess. Features like this tend to get crowded fast once the SEO community decides they're worth pursuing. Right now, most sites aren't asking for it yet. That's the moment to move.

## Get It

[System - Google Preferred](/software/joomla/plugins/system-google-preferred) is free, listed on the [Joomla Extensions Directory](/blog/personal/why-my-joomla-extensions-are-free "Why My Joomla Extensions Are Free"), and available now. No registration, no paid tier, no third-party dependencies. If it's useful to you, adding richeyweb.com as *your* Google Preferred Source is all I ask — and there's a button on this site to do exactly that.

![RicheyWeb Favicon](https://cdn.richeyweb.com/images/logo/richeyweb.svg#joomlaImage://local-images/logo/richeyweb.svg?width=38&height=38) **Add RicheyWeb as a Google Preferred Source** 

[Add now](https://www.google.com/preferences/source?q=richeyweb.com)We'll be highlighted every time we appear in your Google Search results!

 

 



- [      email ](mailto:?subject=I+Built+a+Joomla+Plugin+for+a+Google+Preferred+Sources&body=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fi-built-a-joomla-plugin-for-a-google-preferred-sources)
- [      facebook ](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fi-built-a-joomla-plugin-for-a-google-preferred-sources)
- [      x-twitter ](https://twitter.com/intent/tweet?text=I+Built+a+Joomla+Plugin+for+a+Google+Preferred+Sources%3A+https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fi-built-a-joomla-plugin-for-a-google-preferred-sources)
- [      linkedin ](http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fi-built-a-joomla-plugin-for-a-google-preferred-sources&title=I+Built+a+Joomla+Plugin+for+a+Google+Preferred+Sources&summary=Google+has+been+quietly+handing+publishers+somethi...)
- [      pinterest ](http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fi-built-a-joomla-plugin-for-a-google-preferred-sources&media=https%3A%2F%2Fcdn.richeyweb.com%2Fimages%2Flogo%2Fricheyweb.svg%23joomlaImage%3A%2F%2Flocal-images%2Flogo%2Fricheyweb.svg%3Fwidth%3D38%26amp%3Bheight%3D38&description=I+Built+a+Joomla+Plugin+for+a+Google+Preferred+Sources)
 


 

   [  Next article: How a Bug Report Made HashCash Smarter  How a Bug Report Made HashCash Smarter  ](/blog/development/how-a-bug-report-made-hashcash-smarter)  

##### We Value Your Privacy

 

We use cookies to enhance your experience and for traffic analysis. By continuing to visit this site you agree to our use of cookies.

[Privacy Policy](/privacy-policy)

 Details 

###### Google Tag Manager Items

- Ad Storage
- Ad User Data
- Ad Personalization
- Analytics Storage
- Functionality Storage
- Personalization Storage
- Security Storage
 
 

 

 

 

 

 Decline Accept
```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.richeyweb.com/#organization","name":"RicheyWeb","url":"https://www.richeyweb.com/","logo":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/logo/richeyweb.svg","contentUrl":"https://www.richeyweb.com/images/logo/richeyweb.svg","width":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"@id":"https://www.richeyweb.com/#logo"},"image":{"@id":"https://www.richeyweb.com/#logo"},"sameAs":["https://x.com/ComRicheyweb","https://www.facebook.com/RicheyWebDev/","https://www.youtube.com/channel/UCxnVG8BwOvQRO7hVqNX7T2g","https://community.joomla.org/service-providers-directory/listings/115:richeyweb.html"],"description":"RicheyWeb is a custom software developer specializing in Joomla extensions.","ContactPoint":[{"@type":"ContactPoint","url":"https://www.richeyweb.com/contact-us","telephone":"903-873-8460","contactType":"Owner/Administrator","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"},{"@type":"ContactPoint","url":"https://www.richeyweb.com/bugs","telephone":"903-873-8460","contactType":"Technical Support","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"}],"knowsAbout":["Computer programming",{"@type":"Thing","name":"Computer programming","sameAs":["https://en.wikipedia.org/wiki/Computer_programming","https://www.wikidata.org/wiki/Q80006","https://g.co/kg/m/01mf_"]},"PHP",{"@type":"Thing","name":"PHP","sameAs":["https://en.wikipedia.org/wiki/PHP","https://www.wikidata.org/wiki/Q59","https://g.co/kg/m/060kv"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"arduino","Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"White hat",{"@type":"Thing","name":"White hat","sameAs":["https://en.wikipedia.org/wiki/White_hat_(computer_security)","https://www.wikidata.org/wiki/Q7995625","https://g.co/kg/m/03ns_5"]},"Search engine optimization",{"@type":"Thing","name":"Search engine optimization","sameAs":["https://en.wikipedia.org/wiki/Search_engine_optimization","https://www.wikidata.org/wiki/Q180711","https://g.co/kg/m/019qb_"]},"Search engine marketing",{"@type":"Thing","name":"Search engine marketing","sameAs":["https://en.wikipedia.org/wiki/Search_engine_marketing","https://www.wikidata.org/wiki/Q846132","https://g.co/kg/m/06mw8r"]},"Digital marketing",{"@type":"Thing","name":"Digital marketing","sameAs":["https://en.wikipedia.org/wiki/Digital_marketing","https://www.wikidata.org/wiki/Q1323528","https://g.co/kg/g/122hcnps"]},"Web hosting service",{"@type":"Thing","name":"Web hosting service","sameAs":["https://en.wikipedia.org/wiki/Web_hosting_service","https://www.wikidata.org/wiki/Q5892272","https://g.co/kg/m/014pz4"]},"Email hosting service",{"@type":"Thing","name":"Email hosting service","sameAs":["https://en.wikipedia.org/wiki/Email_hosting_service","https://www.wikidata.org/wiki/Q5368818","https://g.co/kg/m/09w60m"]},"Internet hosting service",{"@type":"Thing","name":"Internet hosting service","sameAs":["https://en.wikipedia.org/wiki/Internet_hosting_service","https://www.wikidata.org/wiki/Q1210425","https://g.co/kg/m/09w5yw"]},"Virtual hosting",{"@type":"Thing","name":"Virtual hosting","sameAs":["https://en.wikipedia.org/wiki/Virtual_hosting","https://www.wikidata.org/wiki/Q588365","https://g.co/kg/m/024mvh"]},"Web performance",{"@type":"Thing","name":"Web performance","sameAs":["https://en.wikipedia.org/wiki/Web_performance","https://www.wikidata.org/wiki/Q7978612","https://g.co/kg/m/0gfj3f1"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"General Data Protection Regulation",{"@type":"Thing","name":"General Data Protection Regulation","sameAs":["https://en.wikipedia.org/wiki/General_Data_Protection_Regulation","https://www.wikidata.org/wiki/Q1172506","https://g.co/kg/m/0pk_7xs"]},"SERP",{"@type":"Thing","name":"SERP","sameAs":["https://en.wikipedia.org/wiki/SERP","https://www.wikidata.org/wiki/Q2205811","https://g.co/kg/g/11c5szp7kc"]},"Artificial intelligence",{"@type":"Thing","name":"Artificial intelligence","sameAs":["https://en.wikipedia.org/wiki/Artificial_intelligence","https://www.wikidata.org/wiki/Q11660","https://g.co/kg/m/0mkz"]},"Prompt engineering",{"@type":"Thing","name":"Prompt engineering","sameAs":["https://en.wikipedia.org/wiki/Prompt_engineering","https://www.wikidata.org/wiki/Q108941486","https://g.co/kg/g/11p6kpgt_n"]},"E-learning",{"@type":"Thing","name":"E-learning","sameAs":["https://en.wikipedia.org/wiki/E-learning_(theory)","https://www.wikidata.org/wiki/Q182250","https://g.co/kg/g/122czm1f"]},"Sharable Content Object Reference Model",{"@type":"Thing","name":"Sharable Content Object Reference Model","sameAs":["https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model","https://www.wikidata.org/wiki/Q827811","https://g.co/kg/m/06_40"]},"Experience API",{"@type":"Thing","name":"Experience API","sameAs":["https://en.wikipedia.org/wiki/Experience_API","https://www.wikidata.org/wiki/Q7807728","https://g.co/kg/g/1yw9ktxr8"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Nginx",{"@type":"Thing","name":"Nginx","sameAs":["https://en.wikipedia.org/wiki/Nginx","https://www.wikidata.org/wiki/Q306144","https://g.co/kg/m/02qft91"]},"MySQL",{"@type":"Thing","name":"MySQL","sameAs":["https://en.wikipedia.org/wiki/MySQL","https://www.wikidata.org/wiki/Q850","https://g.co/kg/m/04y3k"]}],"areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"memberOf":["Mensa International",{"@type":"Organization","name":"Mensa International","sameAs":["https://en.wikipedia.org/wiki/Mensa_International","https://www.wikidata.org/wiki/Q184194","https://g.co/kg/m/0140pf"]},"National Rifle Association",{"@type":"Organization","name":"National Rifle Association","sameAs":["https://en.wikipedia.org/wiki/National_Rifle_Association","https://www.wikidata.org/wiki/Q863259","https://g.co/kg/m/0j6f9"]},"CompTIA",{"@type":"Organization","name":"CompTIA","sameAs":["https://en.wikipedia.org/wiki/CompTIA","https://www.wikidata.org/wiki/Q597534","https://g.co/kg/m/040shq"]},"ISFCE LLC",{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://isfce.com","https://g.co/kg/g/11wxm5r0rg"]}],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"Joomla 3 Certified Administrator","credentialCategory":"Certification","description":"Administrator Exam is the first available Joomla! certification exam","recognizedBy":{"@type":"Organization","name":"Open Source Matters, Inc.","sameAs":["https://en.wikipedia.org/wiki/Open_Source_Matters,_Inc.","https://g.co/kg/g/11f00wvjhz"]},"url":"https://certification.joomla.org/certified-user-directory/michael-richey","about":["Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/badge.webp","contentUrl":"https://www.richeyweb.com/images/contact/badge.webp","width":{"@type":"QuantitativeValue","value":300,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":86,"unitCode":"PX"},"caption":"Joomla 3 Certified Administrator"}},{"@type":"EducationalOccupationalCredential","name":"Certified Computer Examiner","credentialCategory":"Certification","description":"Internationally recognized computer forensics certifiecation","recognizedBy":{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://en.wikipedia.org/wiki/ISFCE_LLC","https://g.co/kg/g/11wxm5r0rg"]},"url":"https://isfce.com/","about":["Digital forensics",{"@type":"Thing","name":"Digital forensics","sameAs":["https://en.wikipedia.org/wiki/Digital_forensics","https://www.wikidata.org/wiki/Q3246940","https://g.co/kg/m/0cnxzfx"]},"Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"Mobile device forensics",{"@type":"Thing","name":"Mobile device forensics","sameAs":["https://en.wikipedia.org/wiki/Mobile_device_forensics","https://www.wikidata.org/wiki/Q6887097","https://g.co/kg/m/06zp3tp"]},"Network forensics",{"@type":"Thing","name":"Network forensics","sameAs":["https://en.wikipedia.org/wiki/Network_forensics","https://www.wikidata.org/wiki/Q7001032","https://g.co/kg/m/05pb280"]},"Database forensics",{"@type":"Thing","name":"Database forensics","sameAs":["https://en.wikipedia.org/wiki/Database_forensics","https://www.wikidata.org/wiki/Q5227405","https://g.co/kg/m/0cgqsy"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/isfce-cce.webp","contentUrl":"https://www.richeyweb.com/images/contact/isfce-cce.webp","width":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"caption":"Certified Computer Examiner"}}],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Web Services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Hosting"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Development"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Search Engine Optimization"}}]}},{"@type":"WebSite","@id":"https://www.richeyweb.com/#website","url":"https://www.richeyweb.com/","name":"RicheyWeb","publisher":{"@id":"https://www.richeyweb.com/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.richeyweb.com/search?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string","valueMaxLength":256,"valueMinLength":2,"valuePattern":"^[A-Za-z0-9\\s]+$"}},"creator":{"@id":"https://www.richeyweb.com/#organization"},"copyrightHolder":{"@id":"https://www.richeyweb.com/#organization"}},{"@type":"WebPage","@id":"https://www.richeyweb.com/blog/development/i-built-a-joomla-plugin-for-a-google-preferred-sources#webpage","url":"https://www.richeyweb.com/blog/development/i-built-a-joomla-plugin-for-a-google-preferred-sources","name":"I Built a Joomla Plugin for a Google Preferred Sources","description":"A Joomla 5 system plugin that adds a Bootstrap toast prompting visitors to add your site in Google Preferred Sources for Top Stories and AI results.","isPartOf":{"@id":"https://www.richeyweb.com/#website"},"about":{"@id":"https://www.richeyweb.com/#organization"},"inLanguage":"en-GB"},{"@type":"Article","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/articles/plg_system_googlepreferred/system-google-preferred.webp","contentUrl":"https://www.richeyweb.com/images/articles/plg_system_googlepreferred/system-google-preferred.webp","width":{"@type":"QuantitativeValue","value":923,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":519,"unitCode":"PX"},"caption":"I Built a Joomla Plugin for a Google Preferred Sources","representativeOfPage":true},"headline":"I Built a Joomla Plugin for a Google Preferred Sources","description":"A Joomla 5 system plugin that adds a Bootstrap toast prompting visitors to add your site in Google Preferred Sources for Top Stories and AI results.","author":{"@type":"Person","name":"Michael Richey","url":"https://www.richeyweb.com/contact-us","@id":"https://www.richeyweb.com/contact-us#person"},"datePublished":"2026-05-29T00:00:00+00:00","dateModified":"2026-05-29T00:00:00+00:00","mainEntityOfPage":"System - Google Preferred","about":["Google Preferred Sources","publisher audience development","web publishing","Joomla extension development","Plug-in",{"@type":"Thing","name":"Plug-in","sameAs":["https://en.wikipedia.org/wiki/Plug-in_(computing)","https://www.wikidata.org/wiki/Q3906765","https://g.co/kg/m/05x35"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Search engine optimization",{"@type":"Thing","name":"Search engine optimization","sameAs":["https://en.wikipedia.org/wiki/Search_engine_optimization","https://www.wikidata.org/wiki/Q180711","https://g.co/kg/m/019qb_"]},"Bootstrap",{"@type":"Thing","name":"Bootstrap","sameAs":["https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework)","https://g.co/kg/m/0j671ln"]}],"mentions":["Google Top Stories","Google AI Mode","Joomla Extensions Directory","Google Search Central","MutationObserver","Google",{"@type":"Thing","name":"Google","sameAs":["https://en.wikipedia.org/wiki/Google","https://www.wikidata.org/wiki/Q95","https://g.co/kg/m/045c7b"]},"Google Search",{"@type":"Thing","name":"Google Search","sameAs":["https://en.wikipedia.org/wiki/Google_Search","https://www.wikidata.org/wiki/Q9366","https://g.co/kg/m/0387r"]},"Google News",{"@type":"WebSite","name":"Google News","sameAs":["https://en.wikipedia.org/wiki/Google_News","https://www.wikidata.org/wiki/Q12020","https://g.co/kg/m/02cxcd"]},"AI Overviews",{"@type":"Thing","name":"AI Overviews","sameAs":["https://en.wikipedia.org/wiki/AI_Overviews","https://www.wikidata.org/wiki/Q131861047","https://g.co/kg/g/11x5rnx50d"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Bootstrap",{"@type":"Thing","name":"Bootstrap","sameAs":["https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework)","https://g.co/kg/m/0j671ln"]},"Search Engine Journal",{"@type":"Thing","name":"Search Engine Journal","sameAs":["https://en.wikipedia.org/wiki/Search_Engine_Journal","https://g.co/kg/g/11l37c7ls1"]},"PPC Land Ventures LLC",{"@type":"Thing","name":"PPC Land Ventures LLC","sameAs":["https://en.wikipedia.org/wiki/PPC_Land_Ventures_LLC","https://g.co/kg/g/11g9n15fcl"]}],"@id":"https://www.richeyweb.com/blog/development/i-built-a-joomla-plugin-for-a-google-preferred-sources#article","isPartOf":{"@id":"https://www.richeyweb.com/blog/development/i-built-a-joomla-plugin-for-a-google-preferred-sources#webpage"},"publisher":{"@id":"https://www.richeyweb.com/#organization"},"keywords":"Joomla Plugin, Google Preferred Sources, Preferred Sources, Top Stories, AI Overviews, AI Mode, Search Engine Journal, PPC Land, system plugin, Bootstrap toast, front end, Google preferences page, cookie, SubscriberInterface, onBeforeCompileHead, WebAssetManager, addScriptOptions, MutationObserver, admin panel, live style preview, radio button groups, domain auto-detection, test link, Joomla Extensions Directory, riche yweb.com","articleSection":"Development","url":"https://www.richeyweb.com/blog/development/i-built-a-joomla-plugin-for-a-google-preferred-sources"}]}
```
