Em4e commited on
Commit
b0f2c48
·
verified ·
1 Parent(s): c7c509c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -5
app.py CHANGED
@@ -116,14 +116,35 @@ class SeoAppUI:
116
  def _display_info_expander(self):
117
  with st.expander("ℹ️ How the app works [CLICK TO EXPAND]", expanded=False):
118
  st.markdown(
119
- """
120
  <div style="background-color: #f0f2f6; padding: 20px; border-radius: 10px;">
121
- <p>1. <b>Load your GSC data</b>. If no file is uploaded, a sample file is used. If no <code>cpc</code> is present, it will be simulated.</p>
122
- <p>2. <b>CTR benchmarks</b> are applied for positions 1–20 to calculate expected clicks.</p>
123
- <p>3. <b>Incremental Clicks = Projected - Current</b>. Financial impact is calculated from these changes.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  </div>
125
  """,
126
- unsafe_allow_html=True,
 
127
  )
128
 
129
  def _get_sidebar_inputs(self):
 
116
  def _display_info_expander(self):
117
  with st.expander("ℹ️ How the app works [CLICK TO EXPAND]", expanded=False):
118
  st.markdown(
119
+ """
120
  <div style="background-color: #f0f2f6; padding: 20px; border-radius: 10px;">
121
+ <p>1. <b>Load your GSC data</b> (we lowercase all column names on load). If no file is uploaded, we use the default sample data. If no <code>cpc</code> column is present, we simulate values between 0.50 and 3.00 USD.</p>
122
+ <p>2. <b>CTR benchmarks</b> by position map an expected click-through rate for positions 1–20.</p>
123
+ <p>3. <b>Incremental Clicks</b> = Projected_Clicks Current_Clicks</p>
124
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• Current_Clicks = Impressions × Current_CTR</p>
125
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• Projected_Clicks = Impressions × Target_CTR</p>
126
+ <p>4. <b>Financials</b></p>
127
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• <b>Avoided Paid Spend</b> = Incremental_Clicks × CPC. This represents the money you <b>don't</b> have to spend on paid ads because your organic SEO efforts are now bringing in those clicks and conversions.</p>
128
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• <b>Net Savings vs Paid</b> = Avoided Paid Spend – SEO Investment</p>
129
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• <b>Incremental MRR</b> = Customers × MRR_per_Customer</p>
130
+ <p>&nbsp;&nbsp;&nbsp;&nbsp;• <b>SEO ROI</b> = (Incremental MRR – SEO Investment) ÷ SEO Investment</p>
131
+ <p><b>Understanding "Additional Ad Spend"</b></p>
132
+ <p>The "Additional Ad Spend" input in the sidebar is a <b>hypothetical budget figure you provide for comparison</b>. It's <b>not</b> calculated from your GSC data or CPC. Instead, it allows you to:</p>
133
+ <ul>
134
+ <li><b>Compare SEO's revenue generation directly against a specific paid ad budget.</b> For instance, if you're considering spending an extra X dollars on Google Ads, you can see whether your SEO's projected incremental MRR is higher or lower than that same amount.</li>
135
+ <li><b>Visualize the efficiency of your SEO investment.</b> If your SEO investment generates significantly more incremental MRR than a comparable additional ad spend, it highlights SEO as a potentially more effective use of marketing funds.</li>
136
+ </ul>
137
+ <p>The "Ad Spend" metric will be <span style="color: green; font-weight: bold;">green</span> if your projected Incremental MRR from SEO is <b>greater than</b> this additional ad spend, and <span style="color: red; font-weight: bold;">red</span> if it is not.</p>
138
+
139
+ <p>5. <b>Interpreting Results & Assumptions</b></p>
140
+ <ul>
141
+ <li><b>Target SERP Position:</b> The 'Target SERP Position' is an <u>aspirational average</u> you aim for among your <u>most important and achievable keywords</u>, rather than a literal expectation for every single query. In reality, not all keywords will reach the same position due to varying competition and relevance.</li>
142
+ <li><b>High-Impact Queries:</b> While the model calculates for all queries, focus your analysis on the 'Detailed Keyword Performance' table. Look for queries with a '🚀 Improvement' impact category and high 'impressions' and 'incremental_clicks'. These are often your most promising opportunities for SEO effort.</li>
143
+ </ul>
144
  </div>
145
  """,
146
+ unsafe_allow_html=True,
147
+ )
148
  )
149
 
150
  def _get_sidebar_inputs(self):