A reader may leave an article, inspect a selection checklist and only then open a consultation form. I wanted the consultation to retain useful context without treating the last screen name as a complete account of that person's interest or journey. In reviewing the actual advertising and consultation site, the important design choice was to keep those different pieces of information from overwriting one another.
A consultation operator needs more than one source label
Knowing that an inquiry used the general contact form does not identify the article that framed the question. Keeping only an article identifier, on the other hand, loses whether a supported checklist or inspection screen intervened. The implementation stores landing_id, source_article_id and source_page separately because they answer different questions. Combining them into one source string would erase those distinctions.
Their meanings also need to be read from the code rather than guessed from their names. Here landing_id is closer to the form's purpose category than the first URL visited: a general consultation uses contact, while a purpose-specific form uses that purpose. source_article_id carries an article identifier, and source_page labels a supported intermediate screen. Those three values do not establish the complete journey or the first acquisition touch.
Let the next action change while retaining the article identifier
Not every article needs to send its reader straight to a contact form. An agency-comparison article may lead to a checklist, while a page-configuration article may lead to an inspection tool. The link builder retains the original article identifier and category even when the destination differs. The intermediate screen can add its own label without discarding that identifier.
This makes it possible to explain a general form purpose, a synthetic article label such as guide-a and a checklist label at the same time. guide-a is an explanatory value, not a real identifier accepted by the original server. The table below is synthetic as well. It separates the fields' roles without publishing an actual customer's article selection or navigation record.
Pass selected labels instead of copying an entire address
The article-to-consultation context carries a fixed article identifier, a category and, where appropriate, an industry. Allowed campaign labels are handled separately. Names, contact details, consultation text and conversation transcripts are not placed into these context parameters. The interface and operation notes also state that a page-inspection address and its result are not automatically forwarded to the consultation form.
The propagation code leaves in-page anchors and external links alone and excludes administrative and API paths. It also avoids blindly replacing values already present on a destination link. That is a limited propagation rule, not automatic detection of every sensitive value or a security audit of every route. The reviewed scope is selected-label handling, not a certification of the entire site's privacy practices.
Helpful interface copy and server validation have different jobs
The form uses a supplied industry label to select an option and adapts its introductory copy to the article context. A plausible identifier in the browser is nevertheless different from an identifier the server should accept. The server checks whether the article belongs to its known set and whether purpose and intermediate-page labels are supported. An unknown article identifier produces an explicit validation error.
An accepted identifier still does not prove that the person read the article. A URL label can be changed, or the link may have been forwarded. I describe these fields as reference context for beginning a conversation. They are not a certificate of completed reading and do not establish that an advertisement caused an inquiry. Validation narrows accepted values without authenticating the claimed browsing history.
Do not invent a source for inquiries that predate the new fields
The migration adds the source columns without deleting existing inquiries and gives older rows empty values. A missing historical article identifier is not filled with whichever article or campaign happens to be open now. In later reporting, an empty value should remain unknown rather than being confidently relabeled as direct acquisition. Missing evidence and evidence of a particular path are different things.
The storage and retrieval code keeps source context and campaign labels as separate values. Article context also does not automatically erase an existing campaign label. Rewriting measurement context while adding consultation context could make both harder to interpret. The reviewed responsibility is preserving those values, not demonstrating an integration with an advertising performance report.
A content category is not always an industry
An early content grouping may help preselect a consultation industry, but not every category describes an industry. The current link builder contains an exception that does not forward one research grouping as the industry value. A collection organized around country cases is a different classification axis. When new categories arrive, the meaning of the value passed by a shared function needs another look.
That distinction reaches the copy as well. Displaying a label about the source article does not establish what business the customer actually operates. An automatic selection is a starting suggestion, and the customer must be able to describe a different situation. A context-sensitive sentence should not become a supposedly tailored answer for every person who follows the same link.
The evidence concerns value propagation, not an increase in inquiries
The selected original test source checks whether article identifiers survive intermediate screens, whether in-page and external links remain unchanged, and whether stored source and campaign fields remain separate. It also covers unknown-identifier rejection and migration preservation of existing inquiries. For this maker account I read those tests; I did not run the original advertising site's submissions, database, build or test suite.
I did not create another similarly named context module. The article links to the existing shared implementation of calculation-context handoff and local-note preservation. I compared the current public ZIP's bytes and hash, extracted it and reran its seventeen synthetic checks. That package does not implement article-identifier propagation; it is a separate reference for the next step of preparing a consultation note.
I judge this connection by whether an operator can explain what is known and what remains unknown, rather than by a promise to track more of a visitor's behavior. The implementation prepares a better first consultation question. Increased submissions, qualified inquiries or contracts would require operational evidence of their own. No such business outcome is invented here.