Illustration of a store owner holding a magnifying glass and a blank checklist beside a shelf of products with blank tags.

WooCommerce Products Not Showing on Google? A 12-Step Settings Audit

Products added, but Google shows a competitor instead? Twelve WooCommerce checks, each with where to look, what good looks like, how to fix it and how to confirm, that you can run in an afternoon.

You added the products. You wrote the descriptions. You searched for one of them on Google and got a competitor, a marketplace, or nothing.

A product page that Google can't index, can't tell apart from ten near-copies, or can't read the price from is a shelf in a stockroom. Customers never see it, and you've still paid for the photos, the plugin and the hosting.

This post is a settings walkthrough for WooCommerce. Twelve checks, in the order I'd run them, each with where to look, what good looks like, how to fix it and how to confirm the fix worked. You can do the whole thing in an afternoon. Nothing here guarantees a ranking, and I'll say so where Google says so.

The quick answer

If you only have ten minutes, these five checks find most of the problems:

  1. Inspect one product URL in Search Console. If Google says "URL is on Google," indexing isn't your problem. If it doesn't, the report tells you why.
  2. Check the site-wide switch. In WordPress, make sure "Discourage search engines from indexing this site" is unticked.
  3. View the source of a product page. Search for noindex, canonical and application/ld+json. You want no noindex, one canonical pointing at the product's own URL, and Product data you can paste into the Rich Results Test.
  4. Sort or filter your shop and watch the URL. If every combination makes a new crawlable URL, Google may waste its time on them.
  5. Open your sitemap. It should list real, indexable product and category URLs and nothing else.

Then work through the rest.

How much to trust each section

I wrote this in October 2026 from two kinds of source, and I'll mark which is which.

Google's documentation is the backbone. I opened every Google page linked below while writing. Those parts are solid.

WooCommerce and WordPress steps come from their own documentation, linked and dated in the sentence. Screen names change between versions and between themes, plugins and hosts, so check them against what you actually see. Where I couldn't tie a step to the vendor's documentation, I tell you what to look for instead of giving you a menu path.

Which settings belong to WooCommerce and which belong to your SEO plugin also varies. Yoast, Rank Math and others each name and place things differently, so I don't give plugin menu paths here. Open your plugin's own documentation for those.

1. Check that Google can index your products

What it is. Indexing means Google has stored the page and can show it. A page that isn't indexed can't appear in results, whatever else you fix.

Where to look. Google Search Console. Paste one product URL into the URL Inspection bar at the top. Google's URL Inspection help says "URL is on Google" means the page is eligible to appear in results, "but is not guaranteed to be there."

What good looks like. The tool reports that the URL is on Google, and the user-declared canonical (the address your page says is the main one) matches the Google-selected canonical (the address Google chose). Google may pick a different one than you declared, and when it does, that's your first clue to a duplicate problem.

Do this for one product, one category page and your shop page. Then open the Page indexing report and look at the reasons pages are not indexed. Google's report help defines each one. These are the ones that matter on a store:

Status in the report

What it means

What to do on a store

Crawled - currently not indexed

Google fetched the page and chose not to index it

Often a sign the page adds little beyond what's already out there. Improve it, then wait

Discovered - currently not indexed

Google knows the URL but hasn't crawled it yet

Check internal links and the sitemap. Many junk URLs can crowd out the real ones

Duplicate without user-selected canonical

Google sees a duplicate and picked its own main version

Add a canonical tag. See sections 5 and 6

URL marked 'noindex'

A noindex tag stopped indexing

Fine for cart and account pages. Not fine for products

URL blocked by robots.txt

Your robots.txt stops Google fetching it

Check the rule is deliberate

Soft 404

The page says "not found" but returns a normal success code

See section 9

How to confirm. After you fix something, run the Test Live URL option in URL Inspection to see the current version of the page. Google's help notes you can Request indexing, but "submitting a request does not guarantee that the page will appear in the Google Index."

To see how products are doing overall, open the Performance report and add a filter. Google's filtering help says to click Add filter, pick Pages, choose URLs containing, and type a string. Use whatever your product URLs have in common, such as /product/.

If traffic fell off a cliff rather than never arriving, start with Website Traffic Dropped Suddenly? What to Check First instead.

2. Make sure nothing tells Google to stay away

What it is. Three different things can keep a page out: a site-wide WordPress setting, a noindex tag on specific pages, and a robots.txt rule. They behave differently, and mixing them up is how stores end up invisible.

Where to look, site-wide. In WordPress, go to Settings > Reading and find the Search Engine Visibility option, labeled "Discourage search engines from indexing this site." The WordPress Codex describes it, and WordPress's own Learn lesson on Reading settings recommends unchecking it before a site launches. Per the Codex, since WordPress 5.3 it works by adding a tag to the page head that asks crawlers to skip the site. It's easy to leave ticked from the build, so check it first.

Where to look, page by page. Open a product page, right-click, choose View Page Source, and search for noindex. Google's noindex documentation says the rule can arrive as a meta tag in the page head or as an X-Robots-Tag HTTP header. A meta tag is easy to find. A header isn't in the page source, so URL Inspection (section 1) is the better test when you suspect one.

Where to look, robots.txt. Open yourstore.com/robots.txt. Google's robots.txt introduction says it's "not a mechanism for keeping a web page out of Google." Blocking a page there can leave its bare URL in results.

Good looks like. The setting is unticked, product, category and shop pages carry no noindex, and robots.txt doesn't disallow /product/, /product-category/ or /shop/ (or whatever your URL bases are).

How to fix. Untick the setting. Remove noindex from product templates in your SEO plugin; look for a content-type setting that controls whether products show in search results. If your robots.txt blocks something you want indexed, remove that line.

One rule to remember: Google can only obey a noindex tag if it can fetch the page. Google's documentation says that if robots.txt blocks a page, "its indexing rules are never read." If you want a page out of Google, noindex it and leave it unblocked.

How to confirm. Re-run URL Inspection with the live test.

3. Check your permalinks and URL bases

What it is. The permalink is the web address of each product, category and tag page. WooCommerce has its own settings for them.

Where to look. Settings > Permalinks in WordPress. As of October 2026, WooCommerce's permalinks documentation describes product permalink choices (Default, Shop base, Shop base with category, Custom base) and separate base fields for product categories, tags and attributes. The category base defaults to product-category and the tag base to product-tag.

What good looks like. Product URLs contain words, not numbers. Google's ecommerce URL guidance prefers something like /product/black-t-shirt-with-a-white-collar over /product/3243. In WooCommerce's list, the Default option uses ID-based URLs in plain permalink mode, so a store showing ?p=123 addresses needs this fixed.

Also check that the product base and category base are different. The WooCommerce docs warn against setting both to the same word, such as "shop," because WordPress then can't tell a category from a product.

One recent change. WooCommerce's developer blog says that from version 10.5, a product in several categories gets the deepest category in its URL. That only affects stores using "Shop base with category" or a custom base containing %product_cat%. If you use one of those, spot-check that your product URLs didn't change after you updated.

How to fix. Pick a readable structure and choose it once. Changing it on a live store changes every product URL, and each old one needs a permanent redirect to the new one. Google's redirect documentation says to use a server-side permanent redirect "whenever possible." If your URLs already contain words and just include /product/, leave them alone. That's not worth the risk.

How to confirm. Click through three products from the shop and from a category page. The URL in the address bar should be the same one in the page's canonical tag (section 5).

4. Decide which archives deserve to be indexed

What it is. WooCommerce creates a page for the shop, for every product category, for every product tag and for every attribute you use for filtering. Not all of them are worth showing to Google.

Where to look. Products > Categories, Products > Tags and Products > Attributes in the admin. WooCommerce's taxonomy documentation says categories are hierarchical (parent and child) and tags are flat, with no "subtags."

What good looks like. Categories are your landing pages. A category like "women's trail running shoes" can match what someone searches, so give it a unique intro, not just a grid. Google's ecommerce structure guidance says category pages should link directly to the products inside them: "It's strongly recommended to link to all products that you wish indexed." Tags with one or two products, or tags that repeat a category, are thin pages. Google's URL guidance says to "avoid linking to, or at least indexing, pages without useful content," and suggests noindex for empty categories.

One trap. WooCommerce's product setting called Catalog visibility has four options: shop and search, shop only, search only, and hidden. The documentation says Hidden means the product is "only visible on the single product page, and nowhere else." That hides the product from your listings, but its page still exists at its address. Hidden is not the same as noindex.

How to fix. Remove tags you don't use. For the thin ones you keep, set noindex in your SEO plugin (look for a taxonomy setting for product tags). Write real intro text for your top categories.

How to confirm. Spot-check with URL Inspection. Then watch the Page indexing report for tag and attribute URLs sitting under "Crawled - currently not indexed."

5. Handle variable products and canonicals

What it is. A variable product (a shirt in five sizes and three colors) is one page with a dropdown. Google, though, has a whole set of rules about variants.

What Google says. Google's product variant documentation says that for a single-page product you need one canonical URL for the whole group, "typically the base product page with no variant selected." If your variants have their own URLs with parameters, those need the right canonical too. Google's URL structure page says that with optional query parameters, "use the URL with the query parameter omitted as the canonical URL."

What WooCommerce does. WooCommerce's REST API documentation shows each variation's address as the parent product URL with an attribute added on the end, like ?attribute_pa_color=green. Some variation swatch plugins also update the address as a shopper picks an option, according to WooCommerce's swatches documentation. I couldn't find WooCommerce documentation saying what canonical tag these addresses get, so test yours.

Where to look. Open a variable product. Pick a color and size. If the address changes, copy it and View Page Source. Search for rel="canonical".

What good looks like. One canonical tag, with an absolute URL, pointing at the base product page. Google's duplicate URL guidance recommends absolute URLs in canonical tags and a self-referencing canonical on the main page.

How to fix. Your SEO plugin or theme normally prints the canonical. If a variation address prints its own, or prints none, look for a canonical setting in the plugin, or ask a developer to check the theme template. Don't use robots.txt to sort this out. Google says not to.

How to confirm. View Source on the variation address. Then URL Inspection: the Google-selected canonical should be your base product page.

6. Control filter and sort URLs

What it is. Filters (by size, color, price) and sort orders (by price, by newest) often create a new address for every combination. A shop with a few hundred products can end up with thousands of near-identical pages. Google's faceted navigation guidance says this tends to cause overcrawling, and crawling wasted on useless URLs slows the discovery of new, useful pages.

Where to look. Go to your shop page. Sort by price. Tick a filter. Add a second one. Watch the address bar and write down what appears after the question mark. I couldn't find official WooCommerce guidance on how filter and sort URLs should be handled, so what you see depends on your theme and filter plugin.

What good looks like. Per Google, you have two options.

  • If these pages don't need to be in search, block crawling with robots.txt. Google says "oftentimes there's no good reason to allow crawling of filtered items."
  • If you want some filtered pages indexed, like "red dresses," use the standard & parameter separator, keep filter order consistent, and return a real 404 for empty or nonsense combinations.

A canonical pointing filtered pages at the unfiltered version helps over time, but Google calls canonical and nofollow "generally less effective in the long term" than blocking.

Two cautions. Don't both disallow a URL in robots.txt and expect its noindex tag to work. Google can't see the tag on a page it can't fetch (section 2). And make sure your category pagination uses plain links. Google's pagination guidance says its crawlers don't click "load more" buttons, links should be <a href> tags, and you shouldn't use the first page as the canonical for the whole sequence.

How to fix. Your SEO plugin or filter plugin may have a setting for noindex or canonical on filtered pages. Look for one. If you'd rather block crawling, a developer can add robots.txt rules for your parameter names. Test with URL Inspection on a filtered address before and after.

How to confirm. Search Console's Page indexing report should stop adding filtered addresses over the next few weeks.

7. Check your Product structured data

What it is. Structured data is a block of code on the page that tells Google "this is a product, it costs this, it's in stock." It's what makes price, availability and ratings eligible to appear next to your result. If you want the plain-English background first, see Does My Small Business Website Need Schema Markup?

Where to look. WooCommerce's developer wiki says it outputs product structured data as JSON-LD, and tells you to view a product page's source and search for application/ld+json. That wiki page is old, so confirm against what you see. It also says structured data is no longer output on shop and category archives, because that contradicts Google's guidelines.

Then paste your product URL into Google's Rich Results Test. Google's structured data introduction recommends testing there during development and then using the Search Console reports after launch, because markup "might break after deployment due to templating or serving issues."

What good looks like. Google's merchant listing documentation lists what a page that sells a product needs:

Field

What Google says

Check on your page

name, image, offers

Required

All three present

price

Required, and "merchant listing experiences require a price greater than zero"

Matches the price a shopper sees

priceCurrency

Required, three-letter code like USD

Present and correct

availability

Recommended. Use one value. "Don't specify more than one value"

Matches stock status on the page

brand, sku, GTIN, review, aggregateRating

Recommended

Fill what you have

Three more things on Google's rules:

  • One product per page. "Product rich results only support pages that focus on a single product (or multiple variants of the same product)." Google recommends marking up product pages "instead of pages that list products or a category of products."
  • Marked-up content must be visible. Google's general structured data guidelines say "Don't mark up content that is not visible to readers of the page," and violations can lead to a manual action.
  • Expired sale dates. If your markup includes priceValidUntil, Google's product snippet documentation says the snippet "may not display if the priceValidUntil property indicates a past date."

Two WooCommerce-specific watch-outs.

  1. Duplicates. If your Rich Results Test shows two Product items, a theme or SEO plugin is probably adding a second block on top of WooCommerce's. Pick one source and turn the other off in its settings. I'd look for a schema or structured data option in each.
  2. Variable products. WooCommerce's documentation for its Google Product Feed extension says that core WooCommerce outputs "a single aggregated product information block for variable products," so you get a price range and no per-variation identifiers. That page is several years old, so check what your version prints. If your products vary by size and color and you sell through Google, ask a developer whether ProductGroup markup is worth it.

GTIN. WooCommerce added a GTIN, UPC, EAN or ISBN field to the classic product editor in version 9.2. If you resell branded products, fill it in. Google lists GTINs as recommended, and Merchant Center asks for them in some cases (section 12).

How to confirm. The Rich Results Test should list a Merchant listings or Product snippets item with no errors, and the price and availability should match the page. In Search Console, the Shopping section has a Merchant listings report and a Product snippets report. Google's rich result report help says they show valid and invalid items, and you can use them to check that your fixes worked. Fixes must be made on your site; Search Console has no "fix this" button.

Two caveats. Rich results are never guaranteed. Google says it "doesn't guarantee that eligible markup will appear." And if a plugin injects your markup with JavaScript, Google's product snippet documentation warns that dynamically generated markup "can make Shopping crawls less frequent and less reliable."

8. Fix product titles, descriptions and image alt text

What it is. The title is what people click in results. The description and images are what convince them (and Google) that the page is about what they searched.

Where to look. Search site:yourstore.com plus a product word on Google and read what shows. Then open your product edit screen. Your SEO plugin adds a search appearance or snippet box; look for one on the product edit screen and in the plugin's settings for product templates. I'm not giving you a plugin menu path here, so check your plugin's own help.

What good looks like. Google's title link guidance says every page should have a descriptive, concise title, that each title should be distinct, that repeated boilerplate makes pages hard to tell apart, and that Google may rewrite titles it finds repetitive or mismatched. For a store, that means the product name plus one useful detail (size, material, model), not "Buy Now | Store Name" on 800 pages. If that's what you have, my post on title tags covers the pattern.

Descriptions work the same way. If you pasted the manufacturer's text, the same words are on every other store that sells the product. Write a few sentences of your own: who it's for, what size or fit questions people ask, what's in the box.

For images, Google's image guidance says alt text is the most important image metadata, to write "information-rich" alt text that fits the page, to use short descriptive filenames, and not to stuff keywords. It also says to use standard <img> elements, because Google doesn't index CSS background images.

How to fix. In your media library, check the alt text field on product images. If it's empty, the image has no description for Google or for screen readers. A short description of what the photo actually shows ("black leather boot, side view") beats a keyword list. For hundreds of products, a bulk-edit or import tool is the practical route: WooCommerce's product image import documentation says alt text can be set per image in the import file.

How to confirm. View Source on a product page and search for alt=. Every product image should have a sensible one.

9. Decide what happens to out-of-stock and discontinued products

What it is. A product sells out, or you stop carrying it. Its page may have links, history and rankings. What you do next matters.

What Google says, and what it doesn't. I couldn't find a Google page that says "do this with an out-of-stock product," so the rest of this section is my judgment, built on what Google does say. Google's HTTP status code documentation says a 404 or 410 means the content doesn't exist and the URL leaves the index. For Search, they're treated the same. It also says a soft 404 is a page that looks like an error but returns a normal 200 code, and Search Console will flag it.

What I'd do.

  • Temporarily out of stock: keep the page up. Make sure the availability in your markup says out of stock, not in stock. Merchant Center checks price and availability against your page (section 12).
  • Gone for good, with a close replacement: a permanent redirect to the closest equivalent product or category. Google says a permanent redirect makes the new URL the one to show.
  • Gone for good, nothing close: let it return 404 or 410. Don't redirect it to the homepage or a generic page. Google's Merchant Center help lists "landing pages that redirect to a generic page" among the website issues that cause disapprovals, and a faceted-navigation page says redirecting to a generic not-found page is not the right approach for empty results.
  • Helpful 404 page: put search and category links on it.

Where WooCommerce comes in. As of October 2026, WooCommerce's delete documentation says trashed products aren't visible to customers and can be restored or permanently deleted later. The documentation I found doesn't say what status the old address returns. Test it: trash a test product and load its old address with your browser's network tools, or use URL Inspection's live test.

There's also a store-wide setting. WooCommerce > Settings > Products > Inventory has an Out of stock visibility option, per WooCommerce's variable products documentation. It hides sold-out products from catalog pages. It doesn't say it removes the pages themselves, so they may remain reachable by address. That doc also says the parent of a variable product stays visible while at least one variation is in stock.

How to confirm. In the Page indexing report, look at the Not found (404) and Soft 404 reasons. Google says a 404 on a removed page "is often harmless." The ones to chase are pages you wanted to keep.

10. Audit what's in your sitemap

What it is. A sitemap is a list of the URLs you want Google to know about.

Where to look. Open yourstore.com/wp-sitemap.xml. That's the WordPress core sitemap, added in version 5.5. Per WordPress's developer documentation, it starts from public post types, and you can remove a type with the wp_sitemaps_post_types filter. Many SEO plugins replace it with their own, in which case the address may differ. Look for a sitemap setting in your plugin and for a Sitemap: line in your robots.txt.

What good looks like. Google's sitemap documentation says:

  • Include canonical URLs only, the ones "you want to see in Google's search results."
  • Use absolute URLs.
  • A single sitemap is limited to 50MB uncompressed or 50,000 URLs.
  • Google uses lastmod only if it's consistently and verifiably accurate, and ignores priority and changefreq.

For a store, open the sitemap and pick ten URLs at random: five products, three categories, two tags. Each should return a normal page, carry a canonical pointing at itself, and not be noindexed. Google also warns against sending "conflicting canonical signals, such as different URLs in a sitemap and a rel="canonical" tag."

How to fix. Remove tag archives you noindexed, filtered addresses and anything that redirects. If your plugin has per-type sitemap switches, use them.

How to confirm. Submit the sitemap in Search Console's Sitemaps report. Submission is a hint, per Google; it may not download it right away. Then compare the number of discovered URLs to the number of products you actually have.

11. Look at speed on shop pages

What it is. Product pages are heavy: big photos, galleries, sliders, reviews, chat widgets, tracking scripts. Speed is part of what Google calls page experience.

Where to look. Search Console's Core Web Vitals report, then run Google's PageSpeed Insights on three pages separately: the shop, a category and a product. Don't just test the homepage.

What good looks like. Google's Core Web Vitals page gives the targets: Largest Contentful Paint within 2.5 seconds, Interaction to Next Paint under 200 milliseconds, Cumulative Layout Shift under 0.1. Google says it "highly recommend[s]" good scores and that they align with what its ranking systems seek to reward, but doesn't say how much weight they carry. So treat speed as a shopper problem first. Slow product pages lose sales no matter what Google does.

How to fix. In the order I'd go:

  1. Images first. Google's image guidance says large images often drive page weight. Resize product photos to the size they display at before uploading, and use a modern format.
  2. Plugins second. Every plugin that adds a script to every page costs something. Test on a staging copy: switch plugins off one at a time and compare PageSpeed results.
  3. Caching and hosting third. If the server is slow before the page even starts loading, the first two won't save you. Our secure WordPress hosting lists server-level caching, a CDN and image optimization, if hosting is where your bottleneck turns out to be.

Ask any host, us included, how their cache treats the cart, checkout and account pages.

For a deeper walkthrough, see Is My Slow Website Hurting My Google Rankings?

How to confirm. The Core Web Vitals report uses real visitor data and updates slowly, so give it a few weeks. PageSpeed Insights shows a test result immediately.

12. Set up reviews and Merchant Center correctly

These two go together: both feed the details shoppers see under your result.

Reviews

Where to look. As of October 2026, WooCommerce's product reviews documentation says to go to WooCommerce > Settings > Products, scroll to the Reviews section and select Enable product reviews. There are two related options: a "verified owner" label on reviews from buyers, and a restriction that only buyers can post. You can override reviews for a single product under Product data > Advanced.

What good looks like. Real customer reviews, visible on the product page. Google's review snippet rules say ratings "must be sourced directly from users," that you shouldn't "aggregate reviews or ratings from other websites," and that reviews must be readily available on the marked-up page. Reviews that aren't based on a genuine experience are prohibited.

Don't mark up a store-wide star rating on your own business. Google says a business that controls reviews about itself is ineligible for star results ("self-serving reviews" on LocalBusiness and Organization markup). Product reviews on a product page are a different thing.

How to fix. If you have no reviews, ask for them the way Google's rules allow. Don't copy reviews from a marketplace onto your page.

How to confirm. The Rich Results Test should show the rating alongside the Product item, and the number should match the visible one.

Google Merchant Center free listings

What it is. Merchant Center is Google's tool for sending your product details to Google. Google's free listings help says products can appear at no cost on Search, Maps, Gemini, YouTube, the Shopping tab, Images and Lens, and adds that "your products aren't guaranteed to show across Google." In most cases free listings are on by default.

Where to look. In Merchant Center, go to Products and open the Needs attention tab. Google's issues help says product-level issues live there, and that other help pages call the same area "Diagnostics." Website problems show up too: placeholder content, broken links, and landing pages that redirect somewhere generic.

On the WooCommerce side, the Google for WooCommerce documentation covers connecting your store. Per its setup and FAQ pages, you grant every permission requested, shipping and tax information are needed before products show on the Shopping tab, and Google typically takes about three days to review account and product data. The FAQ also warns that changing your domain or removing the verification tag can cost you your website claim, which disapproves your products.

What good looks like. Required product data is complete (Google lists ID, title, link, image link, price, description and availability), return and shipping information is set, and price and availability match your page. When they don't, Google's help says it may issue a preemptive item disapproval, and a review is needed to resolve it.

How to fix. Work down the Needs attention list. Fix the data on the WooCommerce side. The setup guide says settings entered in WooCommerce overwrite existing Merchant Center settings, so edits made only in Merchant Center may not stick. Then request a review. Google's help says a fresh crawl usually finishes within 24 to 48 hours.

How to confirm. Issues clear from the tab. Then look at Search Console's Merchant listings report for the same pages.

One note on ads. Free listings are not ads. If you later want paid Shopping ads, we only run ads for clients on our SEO plans, because good pages come first. Here's how that works.

The 15-minute triage

Do these in order. Stop when you find a problem and fix it before moving on.

  1. Settings > Reading: "Discourage search engines" unticked. (1 minute)
  2. URL Inspection on one product, one category, the shop page. Note the canonical Google chose. (4 minutes)
  3. View Source on a product: no noindex, one canonical, JSON-LD present. (2 minutes)
  4. Paste the product URL into the Rich Results Test. One Product item, price and availability correct. (2 minutes)
  5. Sort and filter the shop; note what the URL does. (1 minute)
  6. Open the sitemap; check ten URLs. (2 minutes)
  7. Page indexing report: scan the reasons list for anything surprising. (2 minutes)
  8. Merchant Center, if you use it: open Needs attention. (1 minute)

Write down what you find and the date. A store gets changed constantly by plugin updates, theme updates and new staff, so run the same list again every quarter.

When to get help

  • Search Console shows hundreds or thousands of "Duplicate" or "Crawled - currently not indexed" product URLs and you can't tell why.
  • Your structured data has errors you can't trace to a plugin or theme.
  • You're about to change your permalink structure, move platforms or merge stores. Redirects done wrong can undo years of work.
  • Merchant Center has suspended or disapproved your account, or the same issue keeps coming back after you fix it.

If that's you, our SEO services cover technical audits for stores, and you can get in touch to talk through yours.

Related reading

No comments yet

Managed Nerds Weekly

Get the week's posts in one email

New IT, security and SEO posts every Monday. That's it.