Skip to content
Fresh

Google Discover Architecture

Google Discover is not search. Users do not type queries. The system predicts what content a user wants to see based on behavioral signals, entity interests, and real-time events. This documentation is derived from analysis of 87,498 decompiled classes from the Google app's Android APK.


Methodology

How This Research Was Conducted

Metehan decompiled the Google app (Android APK) and analyzed 87,498 Java/Kotlin classes related to content surfacing, feed ranking, and personalization. The findings below are based on code structure, class names, method signatures, protobuf definitions, and gRPC endpoint analysis -- not speculation.


The 8-Stage Content Pipeline

Content moves through 8 stages before appearing in a user's Discover feed:


Stage 2: Metadata Parsing Hierarchy

Discover parses content metadata in a strict priority chain. If the preferred source is missing, it falls through to the next.

Title Resolution

PrioritySourceNotes
1og:titleOpen Graph title tag
2<title>HTML title element
3headline (schema)Article structured data
4First H1 on pageFallback extraction

Author Resolution

PrioritySourceNotes
1author (schema)Article or Person schema
2article:author (OG)Open Graph author meta
3Byline extractionPattern matching in page content
4Domain nameFinal fallback

Image Resolution

PrioritySourceNotes
1og:imageMust be >= 1200px wide
2image (schema)Article schema image
3First large image in contentMinimum dimension requirements
4No imageCard displays without visual (severely penalized in feed ranking)

Image Requirements

Discover strongly favors content with high-quality images >= 1200px wide. Content without images receives significantly lower placement in the feed. Use og:image with proper dimensions on every article.


Stage 3: Paywall Classification

Discover classifies every article into one of three access tiers:

ClassificationDefinitionFeed Treatment
FreeNo paywall detectedNormal ranking
MeteredLimited free articles, then paywallShown with "X free articles remaining" indicator
LockedFull paywall, no free accessDeprioritized unless user has subscription signals

The system detects paywalls through:

  • isAccessibleForFree schema property
  • JavaScript-based paywall detection patterns
  • Response header analysis
  • Historical click-through and bounce rate patterns (locked content = high bounce)

Stages 4-5: Two-Level Filtering

Collection Filtering (Stage 4)

Collections are broad topic categories (Sports, Technology, Entertainment, etc.). A piece of content is first assigned to one or more collections based on entity and topic analysis. Collection-level filters remove:

  • Content from blocked domains (spam, policy violations)
  • Duplicate content (same story from multiple sources)
  • Content that does not match any collection the user has shown interest in

Entity Filtering (Stage 5)

Entity-level filtering is more granular. Each piece of content is associated with specific entities (people, organizations, products, events). Entity filters remove:

  • Content about entities the user has explicitly muted
  • Content about entities with no engagement history
  • Content about entities that have been "tombstoned"

Tombstoning System

Tombstoning is Discover's mechanism for removing stale or problematic content from the feed without deleting it from the index.

A content card is tombstoned when:

  • The source URL returns a 404 or redirect
  • The content has been significantly modified after initial indexing
  • A manual action or policy violation is applied
  • Engagement metrics fall below minimum thresholds after initial serving

Tombstoned content is not deleted -- it is flagged as ineligible for feed inclusion. It can be "un-tombstoned" if the underlying issue is resolved.


Stage 6: NAIADES Personalization

NAIADES is Google's personalization engine for Discover. It evaluates user interest across 8 subtypes:

SubtypeWhat It MeasuresSignal Source
Explicit InterestTopics the user explicitly followedGoogle app settings, Search history
Implicit InterestTopics inferred from behaviorBrowsing history, app usage, location
Trending InterestRapidly growing topics in user's graphSocial signals, search volume spikes
Seasonal InterestRecurring time-based interestsHistorical engagement by month/season
Local InterestLocation-based relevanceGPS, IP, location history
Social InterestTopics popular in user's social graphContacts, shared content, group memberships
Professional InterestWork-related topicsLinkedIn signals, work app usage, business hours browsing
Entertainment InterestLeisure content preferencesYouTube history, streaming app data, weekend browsing

Each subtype generates a score per entity/topic, and these scores are combined to determine overall user-content relevance.


13 Cluster Types

Discover groups content into clusters -- sets of related articles about the same topic or event. There are 13 cluster types:

#Cluster TypeExampleCard Format
1Breaking NewsMajor world eventFull-width card, multiple sources
2Developing StoryOngoing news story with updatesTimeline card
3Evergreen Topic"How to invest in index funds"Standard card
4Product LaunchNew iPhone announcedProduct card with specs
5Sports EventLive game or matchScore card with live updates
6EntertainmentMovie release, TV showMedia card with trailer
7Local NewsCity-level eventLocation-tagged card
8Weather EventStorm, extreme weatherAlert card
9Financial EventMarket movement, earningsData card with charts
10Science/ResearchNew study publishedCitation card
11How-To/TutorialStep-by-step contentList card
12Opinion/AnalysisCommentary on trending topicAuthor-focused card
13Visual StoryPhoto essay, infographic-heavyGallery card

Freshness Bucketing Logic

Discover assigns each piece of content to a freshness bucket that determines its eligibility window in the feed.

BucketAgeTreatmentBest For
Real-time0-4 hoursHighest priority, pushed to interested usersBreaking news, live events
Fresh4-24 hoursHigh priority, standard feed inclusionNews, timely content
Recent1-3 daysModerate priority, competes on engagementAnalysis, reactions
Current3-7 daysLower priority, needs strong engagement signalEvergreen-ish content
Evergreen7-30 daysLowest priority, only resurfaces on strong user matchTutorials, guides
Archived30+ daysNot shown unless directly relevant to trending topicHistorical reference

Freshness is Not Just Date

Discover uses datePublished, dateModified, HTTP Last-Modified headers, AND content-level freshness signals (new data points, updated statistics, current year references) to determine freshness. Changing the date without changing the content does not fool the system.


Beacon Push System

For time-sensitive content types, Discover uses a "beacon" push system that bypasses normal feed assembly.

Sports Beacons

  • Triggered by live game events (goals, touchdowns, set wins)
  • Pushed to users with demonstrated interest in the specific team/player
  • Include real-time score data
  • Override normal freshness bucketing

Finance Beacons

  • Triggered by significant market movements (>2% index change, earnings surprises)
  • Pushed to users with portfolio or market tracking behavior
  • Include price data and change percentages
  • Time-limited (expire after market close or next trading session)

Real-Time Feed Architecture (6 gRPC Endpoints)

Discover's feed is served through 6 gRPC endpoints, each handling a different aspect of feed assembly:

EndpointFunctionLatency Target
/feed.GetFeedItemsPrimary feed content retrieval<200ms
/feed.GetClusterUpdateReal-time updates to existing clusters<100ms
/feed.GetBeaconPushTime-sensitive push notifications<50ms
/feed.ReportEngagementUser engagement telemetry (clicks, dwell, dismissals)Fire-and-forget
/feed.UpdatePreferencesUser preference changes (follow, mute, hide)<150ms
/feed.GetFeedConfigClient-side configuration (card layouts, feature flags)Cached, <500ms

Publisher Recommendations

Content That Performs in Discover

  1. High-quality images are mandatory. Use og:image with images >= 1200px wide on every article. Content without images is severely penalized.

  2. Write compelling titles in og:title. Discover pulls from og:title first. This is your headline in the feed. Make it specific and engaging without being clickbait.

  3. Publish consistently. Discover's personalization engine builds stronger entity associations with publishers who produce regular content on consistent topics.

  4. Match content to entity clusters. Write about specific entities (people, products, organizations) rather than vague topics. Discover's entity filtering is more powerful than its topic filtering.

  5. Use Article schema with all fields populated. datePublished, dateModified, author, image, headline -- every field gives Discover more metadata to work with.

  6. Do not fake freshness. Updating dateModified without changing content is detectable and will hurt trust signals.

  7. Earn Tier 1 engagement. Dwell time > 60 seconds is the threshold for highest engagement scoring. Deliver value fast but make content worth reading fully.

  8. Monitor tombstoning. If your Discover traffic drops suddenly for a specific URL, check for 404s, redirects, or content modifications that may have triggered tombstoning.

The Discover Mindset

Discover is not search. You are not answering a query. You are predicting what someone wants to know before they ask. Write for entity-level interest matching, not keyword queries.