Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
53 posts found
Technical SEO Audits: Screaming Frog, Lighthouse SEO Audits, Bing Site Scan, the URL Inspection API and Your Own Crawler in CI
SEO & GEO PART 16

Technical SEO Audits: Screaming Frog, Lighthouse SEO Audits, Bing Site Scan, the URL Inspection API and Your Own Crawler in CI

Lighthouse's SEO score shows that a single page follows the basic rules; site-level problems such as broken links, orphan pages and missing hreflang return links are only found by a crawler that walks the site. We compare what Screaming Frog, Bing Site Scan and the URL Inspection API see, write our own C# crawler that checks the sitemap and the link graph, and run it on every PR in GitHub Actions.

15 Nov 2026 14 min 7
Faceted Navigation, Pagination and Infinite Scroll: Serving Catalog Filters Without Burning Crawl Budget
SEO & GEO PART 15

Faceted Navigation, Pagination and Infinite Scroll: Serving Catalog Filters Without Burning Crawl Budget

Filter URLs that don't need indexing are kept out of the crawl with robots.txt; filters to be indexed get one spelling, a fixed order and & separators, combinations without results return 404 at that URL, and every page carries its own canonical. On Bookstore's catalog we build ASP.NET Core code that normalizes filters, pagination with real links, a crawlable "load more" and the Angular SSR counterpart.

15 Nov 2026 13 min 7
Video SEO: Watch Pages, Video Sitemaps, VideoObject, Key Moments with Clip and SeekToAction, and Thumbnail Rules
SEO & GEO PART 14

Video SEO: Watch Pages, Video Sitemaps, VideoObject, Key Moments with Clip and SeekToAction, and Thumbnail Rules

For video features, each video needs one watch page; the video must be in the initial HTML without waiting for a click, and the sitemap, VideoObject and page must state the same thumbnail, title and duration. On Bookstore's video pages we build the video sitemap, key moments with Clip and SeekToAction, the ?t= parameter, stable thumbnail URLs and expiring, regional videos in ASP.NET Core and pin them down with tests.

15 Nov 2026 12 min 7
Image SEO: Alt Text, File Names, srcset/picture, Image Sitemaps, CDN Domains, og:image and max-image-preview
SEO & GEO PART 13

Image SEO: Alt Text, File Names, srcset/picture, Image Sitemaps, CDN Domains, og:image and max-image-preview

Google finds images only in the src of the img element; CSS backgrounds aren't indexed, and srcset and picture always need a src fallback. We generate cover alt text from catalog data, keep file names stable, add image:loc to the sitemap, and set up the CDN domain and the preferred image (og:image, primaryImageOfPage, max-image-preview:large) with ASP.NET Core and Angular's NgOptimizedImage.

15 Nov 2026 12 min 6
Recipes for Other Gallery Types: Event, Course List, Discussion Forum, Q&A, Dataset, Software App and Image Metadata
SEO & GEO PART 09

Recipes for Other Gallery Types: Event, Course List, Discussion Forum, Q&A, Dataset, Software App and Image Metadata

A type is chosen by what the page really is, not by an appearance in the gallery: an online-only event isn't eligible for Event, a product page's Q&A for QAPage, or book reviews for DiscussionForumPosting. We give Bookstore-based cards for Event, Discussion forum, Q&A and Image metadata, explain which types don't fit Bookstore and the carousel limit in Türkiye, and test the cards with a rule table in xUnit.

15 Nov 2026 12 min 11
Store Information at the Organization Level: Logo, Contact Points, MerchantReturnPolicy, Shipping Policy and Precedence
SEO & GEO PART 08

Store Information at the Organization Level: Logo, Contact Points, MerchantReturnPolicy, Shipping Policy and Precedence

Return and shipping policies aren't written into every product page; they are defined once under OnlineStore at the store level, product offers point to them with @id, and only exceptions are overridden at product level. For Bookstore we produce MerchantReturnPolicy and ShippingService from a single StorePolicy object and cover Türkiye's 14-day withdrawal right and Google's precedence between feeds, Search Console and markup.

15 Nov 2026 11 min 10
Review Snippets and AggregateRating: Whose Reviews Count? The Self-Serving Review Rule, Rating Math and Risks
SEO & GEO PART 07

Review Snippets and AggregateRating: Whose Reviews Count? The Self-Serving Review Rule, Rating Math and Risks

Only reviews that are visible on the page, come from users and belong to the reviewed item are eligible for star ratings; a store writing its own rating into Organization runs into the self-serving rule. We filter Bookstore's book reviews through moderation, get the average from one query that EF Core translates to SQL, round it once, and keep page and markup identical with tests.

15 Nov 2026 10 min 8
Product Structured Data: Product Snippet or Merchant Listing? Product, Offer and Book for a Book Page
SEO & GEO PART 06

Product Structured Data: Product Snippet or Merchant Listing? Product, Offer and Book for a Book Page

If the product can be bought on the page, merchant listing rules apply: an Offer is required and the price must be above zero; if not, it's a product snippet. On Bookstore's book page we co-type Product with Book, produce price and stock from the same object as the visible page, mark up the sale price and its end, and pin it all down with xUnit tests.

15 Nov 2026 13 min 8
Measuring the Impact of an SEO Change: Before/After Analysis, Seasonality, Annotations and Honest Reporting
SEO & GEO PART 07

Measuring the Impact of an SEO Change: Before/After Analysis, Seasonality, Annotations and Honest Reporting

You measure the effect of an SEO change against a control group of similar unchanged pages, with whole-week windows and against the range of normal weekly variation; without a control group, season and holidays mix with the effect. We cover writing a hypothesis, annotations, outside factors, a C# analysis on synthetic data, the limits of split tests on a small site and an honest impact report.

15 Nov 2026 10 min 10
The SEO Impact of Core Web Vitals: What Google Says, CrUX Field Data and Building Your Own RUM with web-vitals
SEO & GEO PART 06

The SEO Impact of Core Web Vitals: What Google Says, CrUX Field Data and Building Your Own RUM with web-vitals

According to Google, Core Web Vitals are used by the ranking systems but guarantee no ranking, and relevance comes first; the assessment uses field data from real users, not the Lighthouse score. We cover the thresholds and the 75th percentile, who CrUX includes, the URL groups of the Search Console report, the CrUX API in C# and an ASP.NET Core RUM endpoint that computes p75 the way Search Console does.

15 Nov 2026 12 min 12
Privacy and Consent in Analytics: The KVKK Cookie Guide, Consent Mode and Cookieless Alternatives
SEO & GEO PART 05

Privacy and Consent in Analytics: The KVKK Cookie Guide, Consent Mode and Cookieless Alternatives

You do not load the analytics tag before consent, and when the consent rate changes, GA4's number drops without any change in traffic; you tell them apart with a source consent does not affect. We cover what the KVKK cookie guide means for measurement, ITrackingConsentFeature in ASP.NET Core, consent-gated loading in Angular, basic vs advanced Consent Mode, the 2026 change and cookieless alternatives. Not legal advice.

15 Nov 2026 11 min 9
Measuring On-Site Behavior with GA4: The Event Model, page_view in an Angular SPA, Custom Events and Key Events
SEO & GEO PART 04

Measuring On-Site Behavior with GA4: The Event Model, page_view in an Angular SPA, Custom Events and Key Events

In an Angular SPA you send page_view either through enhanced measurement's history tracking or by hand, never both; if you send it by hand, do it inside a TitleStrategy, because the router writes the title after NavigationEnd. We cover GA4's event model, key events, gtag with a CSP nonce in Razor pages, events that matter for a blog and Measurement Protocol code that sends no personal data.

15 Nov 2026 11 min 7
Blog Map