Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Обновления статусов на главной – угроза для SEO оптимизации IPB

(0 отзывов)

Опрос 8 пользователей проголосовало

  1. 1. ?????

    • ??????? ?? ???? ???????? 2.1 ?? ???????..
      2
    • ?????????? ? ????? ????????...
      4
    • ??????, ??? ??? ????? ??? 2.04
      2

Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Изучаю версию IPB 3.1 и прихожу в ужас. Какая уж там польза от Friendly url или Cannonical метатега, если все сводится на нет из-за массы индексируемого мусора.

 

Рассмотрим любымый многими хук Status Update на главной странице форума.

К сожалению, индексируются не только сами изменения статуса и комментарии к ним, но также и служебные слова и ссылки, включая невидимые и доступные только автору и модераторам.

Например – Разблокировать · Заблокировать. Скрыть. Достигнуто максимальное количество комментариев статуса.

Эта строчка (или другая с другим переводом) на каждом форуме 3.1.x в индексе повторяется столько раз, сколько меняли статус + добавляется мусор из комментариев статусов. Если комментируют много, мусора просто вал...

И это ломает всю оптимизацию, создавая ненужную плотность ненужных ключей.

Но очень много мусора еще и в ссылках вроде "комментировать", "заблокировать", которые видны для ПС, но поисковики, переходя по ним с правами гостей (разумеется), попадают на страницу ошибки.

 

Пока единственное решение, это либо отключить любимый хук, либо срочно закрыть мусор в noindex и к служебным ссылкам по возможности добавлять атрибут rel='nofollow'.

Делается это в шаблоне statusUpdates из группы Profiles (Профили).

Могу выложить свое решение, но скоро выйдет 3.1.2, в которой этот шаблон может поменяться.

 

Источник: Мусор, который создает обновление статуса на главной

6 комментариев

Рекомендованные комментарии

mylipetsk

IPB Specialist

Опубликовано:

Фисана, будь добра, подскажи кужа надо писать ноффолов и нойиндекс, шаблон IBR, вещь то нужная.

Опубликовано:

Проще весь шаблон выложить.

Версия 3.1.1-3.1.2

Профили > statusUpdates

 

<script type="text/javascript">
ipb.status.maxReplies = {parse expression="intval($this->settings['su_max_replies'])"};
ipb.status.smallSpace = {parse expression="intval($smallSpace)"};
</script>
<foreach loop="outerLoop:$updates as $id => $status">
<if test="$this->memberData['member_id'] AND $latestOnly AND $status['member_id'] == $this->memberData['member_id']">
<script type="text/javascript">
	ipb.status.myLatest = {$status['status_id']};
</script>
</if>
<div class='status_main_wrap rounded' id='statusWrap-{$status['status_id']}'>
	<div class="status_main_photo">
		<if test="$smallSpace">
			<a href='{parse url="showuser={$status['member_id']}" seotitle="{$status['members_seo_name']}" template="showuser" base="public"}' title='{$this->lang->words['view_profile']}'><img src='{$status['pp_mini_photo']}' width='{$status['pp_mini_width']}' height='{$status['pp_mini_height']}' alt="{$status['members_display_name']}{$this->lang->words['users_photo']}" class='photo' /></a>	
		<else />
			<a href='{parse url="showuser={$status['member_id']}" seotitle="{$status['members_seo_name']}" template="showuser" base="public"}' title='{$this->lang->words['view_profile']}'><img src='{$status['pp_thumb_photo']}' width='{$status['pp_thumb_width']}' height='{$status['pp_thumb_height']}' alt="{$status['members_display_name']}{$this->lang->words['users_photo']}" class='photo' /></a>	
		</if>
	</div>
	<div class="status_main_content">
		<div id="statusContent-{$status['status_id']}">
			<h4><a href='{parse url="showuser={$status['member_id']}" seotitle="{$status['members_seo_name']}" template="showuser" base="public"}' title='{$this->lang->words['view_profile']}'>{$status['members_display_name']}</a>{parse template="user_popup" group="global" params="$status['member_id'],$status['members_seo_name']"} {$status['status_content']}</h4>
			<noindex><p class='desc'>
				<img src="{$this->settings['img_url']}/<if test="isLockedImgAdmin:|:$status['_isLocked'] == 2">lock_small_orange.png"<else />lock_small_gold.gif"</if> id='statusLockImg-{$status['status_id']}'<if test="isLockedImg:|:!$status['_isLocked']"> style='display:none'</if> alt="{$this->lang->words['status__locked']}" />
				<if test="cImg:|:! $smallSpace AND $status['_creatorImg']"><img src="{$status['_creatorImg']}" alt='' /></if>
				{$status['status_date_formatted_short']}<if test="creatorText:|:$smallSpace AND $status['_creatorText'] AND $status['status_creator'] AND $status['status_creator'] != 'ipb'"> {$this->lang->words['su_via']} {$status['_creatorText']}</if>
				<if test="canDelete:|:$status['_canDelete']"> · <a rel='nofollow' href="{$this->settings['base_url']}app=members&module=profile&section=status&do=deleteStatus&status_id={$status['status_id']}&k={$this->member->form_hash}" id="statusDelete-{$status['status_id']}" class="__sD __d{$status['status_id']}">{$this->lang->words['status_delete_link']}</a></if>
				<span id='statusUnlock-{$status['status_id']}' <if test="isLocked:|:$status['_isLocked'] AND $status['_canUnlock']">style='display:inline'<else />style='display:none'</if>> · <a rel='nofollow' href="{$this->settings['base_url']}app=members&module=profile&section=status&do=unlockStatus&status_id={$status['status_id']}&k={$this->member->form_hash}" id="statusUnlockLink-{$status['status_id']}" class="__sU __u{$status['status_id']}">{$this->lang->words['status_unlock_link']}</a></span>
				<span id='statusLock-{$status['status_id']}' <if test="canLock:|:$status['_canLock'] AND ! $status['_isLocked']">style='display:inline'<else />style='display:none'</if>> · <a  rel='nofollow' href="{$this->settings['base_url']}app=members&module=profile&section=status&do=lockStatus&status_id={$status['status_id']}&k={$this->member->form_hash}" id="statusLockLink-{$status['status_id']}" class="__sL __l{$status['status_id']}">{$this->lang->words['status_lock_link']}</a></span>
			</p></noindex>
			<if test="$smallSpace">
				<p class='desc' id='statusToggle-{$status['status_id']}'>
					<if test="$status['_userCanReply']">
						<if test="$status['status_replies']">
							<noindex><a rel='nofollow' href="#" class="__sT __t{$status['status_id']}">{parse expression="sprintf( $this->lang->words['view_comments_and_add'], $status['status_replies'])"}</a></noindex>
						<else />
							<noindex><a rel='nofollow' href="#" class="__sT __t{$status['status_id']}">{$this->lang->words['add_comments_only']}</a></noindex>
						</if>
					<else />
						<if test="$status['status_replies']">
							<noindex><a rel='nofollow' href="#" class="__sT __t{$status['status_id']}">{parse expression="sprintf( $this->lang->words['view_comments_only'], $status['status_replies'])"}</a></noindex>
						</if>
					</if>
				</p>
				<p class='desc' id='statusToggleOff-{$status['status_id']}' style='display:none'>
					<noindex><a rel='nofollow' href="#" class="__sTO __to{$status['status_id']}">{$this->lang->words['view_comments_collapse']}</a></noindex>
				</p>
			</if>
		</div>
		<div id="statusFeedback-{$status['status_id']}" class='status_feedback' style='display:<if test="$smallSpace">none<else />inline</if>'>
			<if test="$status['status_replies'] AND count( $status['replies'] )">
				<if test="hasMore:|:$status['status_replies'] > 3">
					<div class='status_mini_wrap row2 altrow' id='statusMoreWrap-{$status['status_id']}'>
						<img src="{$this->settings['img_url']}/comments.png" alt="" />  <a href="#" id="statusMore-{$status['status_id']}" class='__showAll __x{$status['status_id']}'>{parse expression="sprintf( $this->lang->words['status_show_all_x'], $status['status_replies'] )"}</a>
					</div>
				</if>
				<div id='statusReplies-{$status['status_id']}'>
					{parse template="statusReplies" group="profile" params="$status['replies']"}
				</div>
			</if>
			<div id='statusReplyBlank-{$status['status_id']}'></div>
			<div id='statusReply-{$status['status_id']}'>
			<if test="$status['_userCanReply']">
				<div class='status_mini_wrap reply row1 rounded'>
					<form id='statusReplyForm-{$status['status_id']}' action='{$this->settings['base_url']}app=members&module=profile&section=status&do=reply&status_id={$status['status_id']}&k={$this->member->form_hash}&id={$this->memberData['member_id']}' method='post'>
						<div class="status_mini_photo">
							<a href='{parse url="showuser={$this->memberData['member_id']}" seotitle="{$this->memberData['members_seo_name']}" template="showuser" base="public"}' title='{$this->lang->words['view_profile']}'><img src='{$this->memberData['pp_mini_photo']}' width='{$this->memberData['pp_mini_width']}' height='{$this->memberData['pp_mini_height']}' alt="{$this->memberData['members_display_name']}{$this->lang->words['users_photo']}" class='photo' /></a>	
						</div>
						<div class="status_mini_content">
							<textarea class='status_textarea' rows='3' cols='50' name='comment-{$status['status_id']}' id='statusText-{$status['status_id']}'></textarea>
							<div class="status_submit"><input type='submit' class='__submit input_submit' id='statusSubmit-{$status['status_id']}' value='{$this->lang->words['status__dfcomment']}' /></div>
						</div>
					</form>
					<a href='#' class='__showform' id='statusReplyFormShow-{$status['status_id']}' style='display: none'>{$this->lang->words['status__addcomment']}</a>
				</div>
				<script type='text/javascript'>
					if( $('statusReplyForm-{$status['status_id']}') )
					{
						$('statusReplyForm-{$status['status_id']}').hide();
					}

					if( $('statusReplyFormShow-{$status['status_id']}') )
					{
						$('statusReplyFormShow-{$status['status_id']}').show();
					}
				</script>
			</if>
			</div>
			<noindex><div class='status_mini_wrap row2 altrow' id='statusMaxWrap-{$status['status_id']}' <if test="maxReplies:|:$status['status_replies'] < $this->settings['su_max_replies']">style='display:none'</if>>
				<img src="{$this->settings['img_url']}/locked_replies.png" title="{$this->lang->words['status_too_many_replies']}" /> {$this->lang->words['status_too_many_replies']}
			</div></noindex>
		</div>
	</div>
</div>
</foreach>

 

Опубликовано:

Кстати, в переводе рекомендую убрать альт 'иконка' (в английском варианте – icon)

Частично альт уничтожен путем изживания переменной из шаблонов, но все равно его пока много и проще в переводе заменить хотя бы на »

 

В трекере на IPS читала возмущения, что народ не желает чрезмерной плотности слова 'icon', так как у них форумы совсем не об иконках :)

В общем, как со статусами...

mylipetsk

IPB Specialist

Опубликовано:

А я думал что об иконках в верси 311 эту проблему решат. Читал же где то уних в блоге разрабоачиков, правда через переводчик. Спасибо за скин со статусами. =)

Опубликовано:

Они частично решили, но не везде альты убрали.

Опубликовано:

Для 3.1.2 шаблон такой же. Но поставила еще один noindex. Код заменила в комментарии...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.